// $ANTLR 3.1 C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g 2008-10-15 07:23:01

import org.antlr.runtime.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;


import org.antlr.runtime.tree.*;

public class gramaticaMM2Parser extends Parser {
    public static final String[] tokenNames = new String[] {
        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "MODULE", "BEGIN", "END", "VAR", "OF", "IF", "THEN", "ELSE", "CASE", "FOR", "WHILE", "PROCEDURE", "RETURN", "TO", "BY", "DO", "INTEGER", "BOOLEAN", "CHAR", "ARRAY", "NOT", "MINUS", "PLUS", "MULT", "DIV", "MOD", "EQUAL", "NEQUAL", "GREATER", "LOWER", "GREATER_EQUAL", "LOWER_EQUAL", "AND", "OR", "ASSIGN", "COMMA", "COLON", "SEMICOLON", "DOT", "LEFT_PAREN", "RIGHT_PAREN", "LEFT_BRACKET", "RIGHT_BRACKET", "DIGIT_NULL", "BAR", "ASPA", "WRITEINT", "WRITECHAR", "WRITEBOOL", "WRITESTRING", "WRITELN", "PROGRAM", "HEADER", "DECLAR_PROC", "DECLAR_FUNC", "LIST_VAR_ID", "LIST_VAR_ARRAY", "DECLAR_VAR", "LIST_PARAM", "BODY", "BODY_RETURN", "ASSIGN_COMMAND_ID", "ASSIGN_COMMAND_ID_ARRAY", "CALL_COMMAND", "IF_COMMAND", "FOR_COMMAND", "WHILE_COMMAND", "CASE_COMMAND", "WRITEINT_COMMAND", "WRITECHAR_COMMAND", "WRITEBOOL_COMMAND", "WRITELN_COMMAND", "WRITESTRING_COMMAND", "LIST_ARGS", "LIST_NUMBER_RANGE", "LIST_NUMBER", "EXPRESSION", "CLAUSE", "LITERAL", "EQUAL_NEQUAL", "ARITMETIC_EXPRESSION", "TERM_EXPRESSION", "NOT_EXPRESSION", "MINUS_EXPRESSION", "FUNC_CALL_EXPRESSION", "ID_EXPRESSION", "ID_ARRAY", "ID", "TIPO", "DECLAR", "INTEIRO", "CARACTER", "STRING", "INT_POSITIVO", "TIPO_ARRAY", "PEREN_EXP", "BOOL", "DIGIT", "LETTER", "NEWLINE", "WS"
    };
    public static final int LIST_ARGS=77;
    public static final int WHILE=14;
    public static final int LETTER=102;
    public static final int MOD=29;
    public static final int BODY_RETURN=64;
    public static final int CASE=12;
    public static final int CHAR=22;
    public static final int DO=19;
    public static final int ASPA=49;
    public static final int NOT=24;
    public static final int EOF=-1;
    public static final int ASSIGN_COMMAND_ID=65;
    public static final int PEREN_EXP=99;
    public static final int CASE_COMMAND=71;
    public static final int GREATER=32;
    public static final int BEGIN=5;
    public static final int TERM_EXPRESSION=85;
    public static final int RETURN=16;
    public static final int RIGHT_BRACKET=46;
    public static final int WRITESTRING=53;
    public static final int WRITEINT=50;
    public static final int FOR_COMMAND=69;
    public static final int VAR=7;
    public static final int BODY=63;
    public static final int WRITESTRING_COMMAND=76;
    public static final int CLAUSE=81;
    public static final int ARRAY=23;
    public static final int FUNC_CALL_EXPRESSION=88;
    public static final int NEQUAL=31;
    public static final int INT_POSITIVO=97;
    public static final int TIPO=92;
    public static final int CARACTER=95;
    public static final int ELSE=11;
    public static final int BOOL=100;
    public static final int DECLAR=93;
    public static final int SEMICOLON=41;
    public static final int MULT=27;
    public static final int OF=8;
    public static final int WHILE_COMMAND=70;
    public static final int EQUAL_NEQUAL=83;
    public static final int WS=104;
    public static final int WRITELN=54;
    public static final int WRITEBOOL=52;
    public static final int LIST_NUMBER_RANGE=78;
    public static final int TIPO_ARRAY=98;
    public static final int INTEIRO=94;
    public static final int OR=37;
    public static final int LEFT_PAREN=43;
    public static final int CALL_COMMAND=67;
    public static final int LOWER=33;
    public static final int END=6;
    public static final int ARITMETIC_EXPRESSION=84;
    public static final int WRITECHAR=51;
    public static final int LOWER_EQUAL=35;
    public static final int LEFT_BRACKET=45;
    public static final int DECLAR_PROC=57;
    public static final int FOR=13;
    public static final int AND=36;
    public static final int ID=91;
    public static final int LIST_VAR_ARRAY=60;
    public static final int LIST_VAR_ID=59;
    public static final int ASSIGN_COMMAND_ID_ARRAY=66;
    public static final int IF=9;
    public static final int ID_EXPRESSION=89;
    public static final int RIGHT_PAREN=44;
    public static final int BOOLEAN=21;
    public static final int THEN=10;
    public static final int COMMA=39;
    public static final int EQUAL=30;
    public static final int WRITEBOOL_COMMAND=74;
    public static final int WRITELN_COMMAND=75;
    public static final int PLUS=26;
    public static final int DECLAR_FUNC=58;
    public static final int DIGIT=101;
    public static final int HEADER=56;
    public static final int DOT=42;
    public static final int MINUS_EXPRESSION=87;
    public static final int EXPRESSION=80;
    public static final int LIST_PARAM=62;
    public static final int INTEGER=20;
    public static final int BY=18;
    public static final int NOT_EXPRESSION=86;
    public static final int TO=17;
    public static final int LITERAL=82;
    public static final int MINUS=25;
    public static final int MODULE=4;
    public static final int PROCEDURE=15;
    public static final int DIGIT_NULL=47;
    public static final int WRITECHAR_COMMAND=73;
    public static final int COLON=40;
    public static final int NEWLINE=103;
    public static final int ASSIGN=38;
    public static final int PROGRAM=55;
    public static final int LIST_NUMBER=79;
    public static final int WRITEINT_COMMAND=72;
    public static final int DIV=28;
    public static final int ID_ARRAY=90;
    public static final int GREATER_EQUAL=34;
    public static final int BAR=48;
    public static final int DECLAR_VAR=61;
    public static final int STRING=96;
    public static final int IF_COMMAND=68;

    // delegates
    // delegators


        public gramaticaMM2Parser(TokenStream input) {
            this(input, new RecognizerSharedState());
        }
        public gramaticaMM2Parser(TokenStream input, RecognizerSharedState state) {
            super(input, state);
             
        }
        
    protected TreeAdaptor adaptor = new CommonTreeAdaptor();

    public void setTreeAdaptor(TreeAdaptor adaptor) {
        this.adaptor = adaptor;
    }
    public TreeAdaptor getTreeAdaptor() {
        return adaptor;
    }

    public String[] getTokenNames() { return gramaticaMM2Parser.tokenNames; }
    public String getGrammarFileName() { return "C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g"; }


    public static class programa_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "programa"
    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:78:1: programa : cabecalho ( declaracoes )* corpo id DOT EOF -> ^( PROGRAM cabecalho ( declaracoes )* corpo id ) ;
    public final gramaticaMM2Parser.programa_return programa() throws RecognitionException {
        gramaticaMM2Parser.programa_return retval = new gramaticaMM2Parser.programa_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token DOT5=null;
        Token EOF6=null;
        gramaticaMM2Parser.cabecalho_return cabecalho1 = null;

        gramaticaMM2Parser.declaracoes_return declaracoes2 = null;

        gramaticaMM2Parser.corpo_return corpo3 = null;

        gramaticaMM2Parser.id_return id4 = null;


        CommonTree DOT5_tree=null;
        CommonTree EOF6_tree=null;
        RewriteRuleTokenStream stream_DOT=new RewriteRuleTokenStream(adaptor,"token DOT");
        RewriteRuleTokenStream stream_EOF=new RewriteRuleTokenStream(adaptor,"token EOF");
        RewriteRuleSubtreeStream stream_id=new RewriteRuleSubtreeStream(adaptor,"rule id");
        RewriteRuleSubtreeStream stream_corpo=new RewriteRuleSubtreeStream(adaptor,"rule corpo");
        RewriteRuleSubtreeStream stream_cabecalho=new RewriteRuleSubtreeStream(adaptor,"rule cabecalho");
        RewriteRuleSubtreeStream stream_declaracoes=new RewriteRuleSubtreeStream(adaptor,"rule declaracoes");
        try {
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:78:10: ( cabecalho ( declaracoes )* corpo id DOT EOF -> ^( PROGRAM cabecalho ( declaracoes )* corpo id ) )
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:78:12: cabecalho ( declaracoes )* corpo id DOT EOF
            {
            pushFollow(FOLLOW_cabecalho_in_programa578);
            cabecalho1=cabecalho();

            state._fsp--;

            stream_cabecalho.add(cabecalho1.getTree());
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:78:22: ( declaracoes )*
            loop1:
            do {
                int alt1=2;
                int LA1_0 = input.LA(1);

                if ( (LA1_0==VAR||LA1_0==PROCEDURE) ) {
                    alt1=1;
                }


                switch (alt1) {
            	case 1 :
            	    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:78:22: declaracoes
            	    {
            	    pushFollow(FOLLOW_declaracoes_in_programa580);
            	    declaracoes2=declaracoes();

            	    state._fsp--;

            	    stream_declaracoes.add(declaracoes2.getTree());

            	    }
            	    break;

            	default :
            	    break loop1;
                }
            } while (true);

            pushFollow(FOLLOW_corpo_in_programa583);
            corpo3=corpo();

            state._fsp--;

            stream_corpo.add(corpo3.getTree());
            pushFollow(FOLLOW_id_in_programa585);
            id4=id();

            state._fsp--;

            stream_id.add(id4.getTree());
            DOT5=(Token)match(input,DOT,FOLLOW_DOT_in_programa587);  
            stream_DOT.add(DOT5);

            EOF6=(Token)match(input,EOF,FOLLOW_EOF_in_programa589);  
            stream_EOF.add(EOF6);



            // AST REWRITE
            // elements: id, cabecalho, declaracoes, corpo
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

            root_0 = (CommonTree)adaptor.nil();
            // 79:2: -> ^( PROGRAM cabecalho ( declaracoes )* corpo id )
            {
                // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:79:5: ^( PROGRAM cabecalho ( declaracoes )* corpo id )
                {
                CommonTree root_1 = (CommonTree)adaptor.nil();
                root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(PROGRAM, "PROGRAM"), root_1);

                adaptor.addChild(root_1, stream_cabecalho.nextTree());
                // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:79:25: ( declaracoes )*
                while ( stream_declaracoes.hasNext() ) {
                    adaptor.addChild(root_1, stream_declaracoes.nextTree());

                }
                stream_declaracoes.reset();
                adaptor.addChild(root_1, stream_corpo.nextTree());
                adaptor.addChild(root_1, stream_id.nextTree());

                adaptor.addChild(root_0, root_1);
                }

            }

            retval.tree = root_0;
            }

            retval.stop = input.LT(-1);

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "programa"

    public static class cabecalho_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "cabecalho"
    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:82:1: cabecalho : MODULE id SEMICOLON -> ^( HEADER id ) ;
    public final gramaticaMM2Parser.cabecalho_return cabecalho() throws RecognitionException {
        gramaticaMM2Parser.cabecalho_return retval = new gramaticaMM2Parser.cabecalho_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token MODULE7=null;
        Token SEMICOLON9=null;
        gramaticaMM2Parser.id_return id8 = null;


        CommonTree MODULE7_tree=null;
        CommonTree SEMICOLON9_tree=null;
        RewriteRuleTokenStream stream_SEMICOLON=new RewriteRuleTokenStream(adaptor,"token SEMICOLON");
        RewriteRuleTokenStream stream_MODULE=new RewriteRuleTokenStream(adaptor,"token MODULE");
        RewriteRuleSubtreeStream stream_id=new RewriteRuleSubtreeStream(adaptor,"rule id");
        try {
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:82:11: ( MODULE id SEMICOLON -> ^( HEADER id ) )
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:82:13: MODULE id SEMICOLON
            {
            MODULE7=(Token)match(input,MODULE,FOLLOW_MODULE_in_cabecalho614);  
            stream_MODULE.add(MODULE7);

            pushFollow(FOLLOW_id_in_cabecalho616);
            id8=id();

            state._fsp--;

            stream_id.add(id8.getTree());
            SEMICOLON9=(Token)match(input,SEMICOLON,FOLLOW_SEMICOLON_in_cabecalho618);  
            stream_SEMICOLON.add(SEMICOLON9);



            // AST REWRITE
            // elements: id
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

            root_0 = (CommonTree)adaptor.nil();
            // 83:1: -> ^( HEADER id )
            {
                // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:83:5: ^( HEADER id )
                {
                CommonTree root_1 = (CommonTree)adaptor.nil();
                root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(HEADER, "HEADER"), root_1);

                adaptor.addChild(root_1, stream_id.nextTree());

                adaptor.addChild(root_0, root_1);
                }

            }

            retval.tree = root_0;
            }

            retval.stop = input.LT(-1);

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "cabecalho"

    public static class declaracoes_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "declaracoes"
    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:85:1: declaracoes : tipo_declaracao -> ^( DECLAR tipo_declaracao ) ;
    public final gramaticaMM2Parser.declaracoes_return declaracoes() throws RecognitionException {
        gramaticaMM2Parser.declaracoes_return retval = new gramaticaMM2Parser.declaracoes_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        gramaticaMM2Parser.tipo_declaracao_return tipo_declaracao10 = null;


        RewriteRuleSubtreeStream stream_tipo_declaracao=new RewriteRuleSubtreeStream(adaptor,"rule tipo_declaracao");
        try {
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:85:13: ( tipo_declaracao -> ^( DECLAR tipo_declaracao ) )
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:85:15: tipo_declaracao
            {
            pushFollow(FOLLOW_tipo_declaracao_in_declaracoes637);
            tipo_declaracao10=tipo_declaracao();

            state._fsp--;

            stream_tipo_declaracao.add(tipo_declaracao10.getTree());


            // AST REWRITE
            // elements: tipo_declaracao
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

            root_0 = (CommonTree)adaptor.nil();
            // 85:31: -> ^( DECLAR tipo_declaracao )
            {
                // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:85:34: ^( DECLAR tipo_declaracao )
                {
                CommonTree root_1 = (CommonTree)adaptor.nil();
                root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(DECLAR, "DECLAR"), root_1);

                adaptor.addChild(root_1, stream_tipo_declaracao.nextTree());

                adaptor.addChild(root_0, root_1);
                }

            }

            retval.tree = root_0;
            }

            retval.stop = input.LT(-1);

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "declaracoes"

    public static class tipo_declaracao_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "tipo_declaracao"
    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:87:1: tipo_declaracao : ( declaracao_procedimento | declaracao_variaveis | declaracao_funcao ) ;
    public final gramaticaMM2Parser.tipo_declaracao_return tipo_declaracao() throws RecognitionException {
        gramaticaMM2Parser.tipo_declaracao_return retval = new gramaticaMM2Parser.tipo_declaracao_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        gramaticaMM2Parser.declaracao_procedimento_return declaracao_procedimento11 = null;

        gramaticaMM2Parser.declaracao_variaveis_return declaracao_variaveis12 = null;

        gramaticaMM2Parser.declaracao_funcao_return declaracao_funcao13 = null;



        try {
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:87:17: ( ( declaracao_procedimento | declaracao_variaveis | declaracao_funcao ) )
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:87:19: ( declaracao_procedimento | declaracao_variaveis | declaracao_funcao )
            {
            root_0 = (CommonTree)adaptor.nil();

            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:87:19: ( declaracao_procedimento | declaracao_variaveis | declaracao_funcao )
            int alt2=3;
            alt2 = dfa2.predict(input);
            switch (alt2) {
                case 1 :
                    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:87:20: declaracao_procedimento
                    {
                    pushFollow(FOLLOW_declaracao_procedimento_in_tipo_declaracao657);
                    declaracao_procedimento11=declaracao_procedimento();

                    state._fsp--;

                    adaptor.addChild(root_0, declaracao_procedimento11.getTree());

                    }
                    break;
                case 2 :
                    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:88:6: declaracao_variaveis
                    {
                    pushFollow(FOLLOW_declaracao_variaveis_in_tipo_declaracao664);
                    declaracao_variaveis12=declaracao_variaveis();

                    state._fsp--;

                    adaptor.addChild(root_0, declaracao_variaveis12.getTree());

                    }
                    break;
                case 3 :
                    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:89:6: declaracao_funcao
                    {
                    pushFollow(FOLLOW_declaracao_funcao_in_tipo_declaracao671);
                    declaracao_funcao13=declaracao_funcao();

                    state._fsp--;

                    adaptor.addChild(root_0, declaracao_funcao13.getTree());

                    }
                    break;

            }


            }

            retval.stop = input.LT(-1);

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "tipo_declaracao"

    public static class declaracao_procedimento_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "declaracao_procedimento"
    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:91:1: declaracao_procedimento : PROCEDURE id LEFT_PAREN ( lista_parametros | ) RIGHT_PAREN SEMICOLON ( declaracao_variaveis )* corpo id SEMICOLON -> ^( DECLAR_PROC id ( lista_parametros )? ( declaracao_variaveis )* corpo id ) ;
    public final gramaticaMM2Parser.declaracao_procedimento_return declaracao_procedimento() throws RecognitionException {
        gramaticaMM2Parser.declaracao_procedimento_return retval = new gramaticaMM2Parser.declaracao_procedimento_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token PROCEDURE14=null;
        Token LEFT_PAREN16=null;
        Token RIGHT_PAREN18=null;
        Token SEMICOLON19=null;
        Token SEMICOLON23=null;
        gramaticaMM2Parser.id_return id15 = null;

        gramaticaMM2Parser.lista_parametros_return lista_parametros17 = null;

        gramaticaMM2Parser.declaracao_variaveis_return declaracao_variaveis20 = null;

        gramaticaMM2Parser.corpo_return corpo21 = null;

        gramaticaMM2Parser.id_return id22 = null;


        CommonTree PROCEDURE14_tree=null;
        CommonTree LEFT_PAREN16_tree=null;
        CommonTree RIGHT_PAREN18_tree=null;
        CommonTree SEMICOLON19_tree=null;
        CommonTree SEMICOLON23_tree=null;
        RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
        RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
        RewriteRuleTokenStream stream_SEMICOLON=new RewriteRuleTokenStream(adaptor,"token SEMICOLON");
        RewriteRuleTokenStream stream_PROCEDURE=new RewriteRuleTokenStream(adaptor,"token PROCEDURE");
        RewriteRuleSubtreeStream stream_id=new RewriteRuleSubtreeStream(adaptor,"rule id");
        RewriteRuleSubtreeStream stream_corpo=new RewriteRuleSubtreeStream(adaptor,"rule corpo");
        RewriteRuleSubtreeStream stream_declaracao_variaveis=new RewriteRuleSubtreeStream(adaptor,"rule declaracao_variaveis");
        RewriteRuleSubtreeStream stream_lista_parametros=new RewriteRuleSubtreeStream(adaptor,"rule lista_parametros");
        try {
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:91:26: ( PROCEDURE id LEFT_PAREN ( lista_parametros | ) RIGHT_PAREN SEMICOLON ( declaracao_variaveis )* corpo id SEMICOLON -> ^( DECLAR_PROC id ( lista_parametros )? ( declaracao_variaveis )* corpo id ) )
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:91:28: PROCEDURE id LEFT_PAREN ( lista_parametros | ) RIGHT_PAREN SEMICOLON ( declaracao_variaveis )* corpo id SEMICOLON
            {
            PROCEDURE14=(Token)match(input,PROCEDURE,FOLLOW_PROCEDURE_in_declaracao_procedimento681);  
            stream_PROCEDURE.add(PROCEDURE14);

            pushFollow(FOLLOW_id_in_declaracao_procedimento683);
            id15=id();

            state._fsp--;

            stream_id.add(id15.getTree());
            LEFT_PAREN16=(Token)match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_declaracao_procedimento685);  
            stream_LEFT_PAREN.add(LEFT_PAREN16);

            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:91:52: ( lista_parametros | )
            int alt3=2;
            int LA3_0 = input.LA(1);

            if ( (LA3_0==LETTER) ) {
                alt3=1;
            }
            else if ( (LA3_0==RIGHT_PAREN) ) {
                alt3=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 3, 0, input);

                throw nvae;
            }
            switch (alt3) {
                case 1 :
                    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:91:53: lista_parametros
                    {
                    pushFollow(FOLLOW_lista_parametros_in_declaracao_procedimento688);
                    lista_parametros17=lista_parametros();

                    state._fsp--;

                    stream_lista_parametros.add(lista_parametros17.getTree());

                    }
                    break;
                case 2 :
                    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:91:70: 
                    {
                    }
                    break;

            }

            RIGHT_PAREN18=(Token)match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_declaracao_procedimento692);  
            stream_RIGHT_PAREN.add(RIGHT_PAREN18);

            SEMICOLON19=(Token)match(input,SEMICOLON,FOLLOW_SEMICOLON_in_declaracao_procedimento694);  
            stream_SEMICOLON.add(SEMICOLON19);

            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:91:94: ( declaracao_variaveis )*
            loop4:
            do {
                int alt4=2;
                int LA4_0 = input.LA(1);

                if ( (LA4_0==VAR) ) {
                    alt4=1;
                }


                switch (alt4) {
            	case 1 :
            	    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:91:94: declaracao_variaveis
            	    {
            	    pushFollow(FOLLOW_declaracao_variaveis_in_declaracao_procedimento696);
            	    declaracao_variaveis20=declaracao_variaveis();

            	    state._fsp--;

            	    stream_declaracao_variaveis.add(declaracao_variaveis20.getTree());

            	    }
            	    break;

            	default :
            	    break loop4;
                }
            } while (true);

            pushFollow(FOLLOW_corpo_in_declaracao_procedimento699);
            corpo21=corpo();

            state._fsp--;

            stream_corpo.add(corpo21.getTree());
            pushFollow(FOLLOW_id_in_declaracao_procedimento701);
            id22=id();

            state._fsp--;

            stream_id.add(id22.getTree());
            SEMICOLON23=(Token)match(input,SEMICOLON,FOLLOW_SEMICOLON_in_declaracao_procedimento703);  
            stream_SEMICOLON.add(SEMICOLON23);



            // AST REWRITE
            // elements: corpo, id, id, lista_parametros, declaracao_variaveis
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

            root_0 = (CommonTree)adaptor.nil();
            // 92:2: -> ^( DECLAR_PROC id ( lista_parametros )? ( declaracao_variaveis )* corpo id )
            {
                // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:92:5: ^( DECLAR_PROC id ( lista_parametros )? ( declaracao_variaveis )* corpo id )
                {
                CommonTree root_1 = (CommonTree)adaptor.nil();
                root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(DECLAR_PROC, "DECLAR_PROC"), root_1);

                adaptor.addChild(root_1, stream_id.nextTree());
                // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:92:22: ( lista_parametros )?
                if ( stream_lista_parametros.hasNext() ) {
                    adaptor.addChild(root_1, stream_lista_parametros.nextTree());

                }
                stream_lista_parametros.reset();
                // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:92:40: ( declaracao_variaveis )*
                while ( stream_declaracao_variaveis.hasNext() ) {
                    adaptor.addChild(root_1, stream_declaracao_variaveis.nextTree());

                }
                stream_declaracao_variaveis.reset();
                adaptor.addChild(root_1, stream_corpo.nextTree());
                adaptor.addChild(root_1, stream_id.nextTree());

                adaptor.addChild(root_0, root_1);
                }

            }

            retval.tree = root_0;
            }

            retval.stop = input.LT(-1);

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "declaracao_procedimento"

    public static class declaracao_funcao_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "declaracao_funcao"
    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:94:1: declaracao_funcao : PROCEDURE id LEFT_PAREN ( lista_parametros | ) RIGHT_PAREN COLON tipo SEMICOLON ( declaracao_variaveis )* corpo_return id SEMICOLON -> ^( DECLAR_FUNC id ( lista_parametros )? tipo ( declaracao_variaveis )* corpo_return id ) ;
    public final gramaticaMM2Parser.declaracao_funcao_return declaracao_funcao() throws RecognitionException {
        gramaticaMM2Parser.declaracao_funcao_return retval = new gramaticaMM2Parser.declaracao_funcao_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token PROCEDURE24=null;
        Token LEFT_PAREN26=null;
        Token RIGHT_PAREN28=null;
        Token COLON29=null;
        Token SEMICOLON31=null;
        Token SEMICOLON35=null;
        gramaticaMM2Parser.id_return id25 = null;

        gramaticaMM2Parser.lista_parametros_return lista_parametros27 = null;

        gramaticaMM2Parser.tipo_return tipo30 = null;

        gramaticaMM2Parser.declaracao_variaveis_return declaracao_variaveis32 = null;

        gramaticaMM2Parser.corpo_return_return corpo_return33 = null;

        gramaticaMM2Parser.id_return id34 = null;


        CommonTree PROCEDURE24_tree=null;
        CommonTree LEFT_PAREN26_tree=null;
        CommonTree RIGHT_PAREN28_tree=null;
        CommonTree COLON29_tree=null;
        CommonTree SEMICOLON31_tree=null;
        CommonTree SEMICOLON35_tree=null;
        RewriteRuleTokenStream stream_COLON=new RewriteRuleTokenStream(adaptor,"token COLON");
        RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
        RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
        RewriteRuleTokenStream stream_SEMICOLON=new RewriteRuleTokenStream(adaptor,"token SEMICOLON");
        RewriteRuleTokenStream stream_PROCEDURE=new RewriteRuleTokenStream(adaptor,"token PROCEDURE");
        RewriteRuleSubtreeStream stream_id=new RewriteRuleSubtreeStream(adaptor,"rule id");
        RewriteRuleSubtreeStream stream_tipo=new RewriteRuleSubtreeStream(adaptor,"rule tipo");
        RewriteRuleSubtreeStream stream_declaracao_variaveis=new RewriteRuleSubtreeStream(adaptor,"rule declaracao_variaveis");
        RewriteRuleSubtreeStream stream_lista_parametros=new RewriteRuleSubtreeStream(adaptor,"rule lista_parametros");
        RewriteRuleSubtreeStream stream_corpo_return=new RewriteRuleSubtreeStream(adaptor,"rule corpo_return");
        try {
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:94:20: ( PROCEDURE id LEFT_PAREN ( lista_parametros | ) RIGHT_PAREN COLON tipo SEMICOLON ( declaracao_variaveis )* corpo_return id SEMICOLON -> ^( DECLAR_FUNC id ( lista_parametros )? tipo ( declaracao_variaveis )* corpo_return id ) )
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:94:22: PROCEDURE id LEFT_PAREN ( lista_parametros | ) RIGHT_PAREN COLON tipo SEMICOLON ( declaracao_variaveis )* corpo_return id SEMICOLON
            {
            PROCEDURE24=(Token)match(input,PROCEDURE,FOLLOW_PROCEDURE_in_declaracao_funcao732);  
            stream_PROCEDURE.add(PROCEDURE24);

            pushFollow(FOLLOW_id_in_declaracao_funcao734);
            id25=id();

            state._fsp--;

            stream_id.add(id25.getTree());
            LEFT_PAREN26=(Token)match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_declaracao_funcao736);  
            stream_LEFT_PAREN.add(LEFT_PAREN26);

            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:94:46: ( lista_parametros | )
            int alt5=2;
            int LA5_0 = input.LA(1);

            if ( (LA5_0==LETTER) ) {
                alt5=1;
            }
            else if ( (LA5_0==RIGHT_PAREN) ) {
                alt5=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 5, 0, input);

                throw nvae;
            }
            switch (alt5) {
                case 1 :
                    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:94:47: lista_parametros
                    {
                    pushFollow(FOLLOW_lista_parametros_in_declaracao_funcao739);
                    lista_parametros27=lista_parametros();

                    state._fsp--;

                    stream_lista_parametros.add(lista_parametros27.getTree());

                    }
                    break;
                case 2 :
                    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:94:64: 
                    {
                    }
                    break;

            }

            RIGHT_PAREN28=(Token)match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_declaracao_funcao743);  
            stream_RIGHT_PAREN.add(RIGHT_PAREN28);

            COLON29=(Token)match(input,COLON,FOLLOW_COLON_in_declaracao_funcao745);  
            stream_COLON.add(COLON29);

            pushFollow(FOLLOW_tipo_in_declaracao_funcao747);
            tipo30=tipo();

            state._fsp--;

            stream_tipo.add(tipo30.getTree());
            SEMICOLON31=(Token)match(input,SEMICOLON,FOLLOW_SEMICOLON_in_declaracao_funcao749);  
            stream_SEMICOLON.add(SEMICOLON31);

            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:94:99: ( declaracao_variaveis )*
            loop6:
            do {
                int alt6=2;
                int LA6_0 = input.LA(1);

                if ( (LA6_0==VAR) ) {
                    alt6=1;
                }


                switch (alt6) {
            	case 1 :
            	    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:94:99: declaracao_variaveis
            	    {
            	    pushFollow(FOLLOW_declaracao_variaveis_in_declaracao_funcao751);
            	    declaracao_variaveis32=declaracao_variaveis();

            	    state._fsp--;

            	    stream_declaracao_variaveis.add(declaracao_variaveis32.getTree());

            	    }
            	    break;

            	default :
            	    break loop6;
                }
            } while (true);

            pushFollow(FOLLOW_corpo_return_in_declaracao_funcao754);
            corpo_return33=corpo_return();

            state._fsp--;

            stream_corpo_return.add(corpo_return33.getTree());
            pushFollow(FOLLOW_id_in_declaracao_funcao756);
            id34=id();

            state._fsp--;

            stream_id.add(id34.getTree());
            SEMICOLON35=(Token)match(input,SEMICOLON,FOLLOW_SEMICOLON_in_declaracao_funcao758);  
            stream_SEMICOLON.add(SEMICOLON35);



            // AST REWRITE
            // elements: tipo, id, declaracao_variaveis, lista_parametros, id, corpo_return
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

            root_0 = (CommonTree)adaptor.nil();
            // 95:2: -> ^( DECLAR_FUNC id ( lista_parametros )? tipo ( declaracao_variaveis )* corpo_return id )
            {
                // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:95:5: ^( DECLAR_FUNC id ( lista_parametros )? tipo ( declaracao_variaveis )* corpo_return id )
                {
                CommonTree root_1 = (CommonTree)adaptor.nil();
                root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(DECLAR_FUNC, "DECLAR_FUNC"), root_1);

                adaptor.addChild(root_1, stream_id.nextTree());
                // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:95:22: ( lista_parametros )?
                if ( stream_lista_parametros.hasNext() ) {
                    adaptor.addChild(root_1, stream_lista_parametros.nextTree());

                }
                stream_lista_parametros.reset();
                adaptor.addChild(root_1, stream_tipo.nextTree());
                // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:95:45: ( declaracao_variaveis )*
                while ( stream_declaracao_variaveis.hasNext() ) {
                    adaptor.addChild(root_1, stream_declaracao_variaveis.nextTree());

                }
                stream_declaracao_variaveis.reset();
                adaptor.addChild(root_1, stream_corpo_return.nextTree());
                adaptor.addChild(root_1, stream_id.nextTree());

                adaptor.addChild(root_0, root_1);
                }

            }

            retval.tree = root_0;
            }

            retval.stop = input.LT(-1);

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "declaracao_funcao"

    public static class declaracao_variaveis_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "declaracao_variaveis"
    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:97:1: declaracao_variaveis : VAR ( lista_variaveis )+ -> ^( DECLAR_VAR ( lista_variaveis )+ ) ;
    public final gramaticaMM2Parser.declaracao_variaveis_return declaracao_variaveis() throws RecognitionException {
        gramaticaMM2Parser.declaracao_variaveis_return retval = new gramaticaMM2Parser.declaracao_variaveis_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token VAR36=null;
        gramaticaMM2Parser.lista_variaveis_return lista_variaveis37 = null;


        CommonTree VAR36_tree=null;
        RewriteRuleTokenStream stream_VAR=new RewriteRuleTokenStream(adaptor,"token VAR");
        RewriteRuleSubtreeStream stream_lista_variaveis=new RewriteRuleSubtreeStream(adaptor,"rule lista_variaveis");
        try {
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:97:22: ( VAR ( lista_variaveis )+ -> ^( DECLAR_VAR ( lista_variaveis )+ ) )
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:97:24: VAR ( lista_variaveis )+
            {
            VAR36=(Token)match(input,VAR,FOLLOW_VAR_in_declaracao_variaveis787);  
            stream_VAR.add(VAR36);

            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:97:28: ( lista_variaveis )+
            int cnt7=0;
            loop7:
            do {
                int alt7=2;
                int LA7_0 = input.LA(1);

                if ( (LA7_0==LETTER) ) {
                    alt7=1;
                }


                switch (alt7) {
            	case 1 :
            	    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:97:28: lista_variaveis
            	    {
            	    pushFollow(FOLLOW_lista_variaveis_in_declaracao_variaveis789);
            	    lista_variaveis37=lista_variaveis();

            	    state._fsp--;

            	    stream_lista_variaveis.add(lista_variaveis37.getTree());

            	    }
            	    break;

            	default :
            	    if ( cnt7 >= 1 ) break loop7;
                        EarlyExitException eee =
                            new EarlyExitException(7, input);
                        throw eee;
                }
                cnt7++;
            } while (true);



            // AST REWRITE
            // elements: lista_variaveis
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

            root_0 = (CommonTree)adaptor.nil();
            // 98:2: -> ^( DECLAR_VAR ( lista_variaveis )+ )
            {
                // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:98:5: ^( DECLAR_VAR ( lista_variaveis )+ )
                {
                CommonTree root_1 = (CommonTree)adaptor.nil();
                root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(DECLAR_VAR, "DECLAR_VAR"), root_1);

                if ( !(stream_lista_variaveis.hasNext()) ) {
                    throw new RewriteEarlyExitException();
                }
                while ( stream_lista_variaveis.hasNext() ) {
                    adaptor.addChild(root_1, stream_lista_variaveis.nextTree());

                }
                stream_lista_variaveis.reset();

                adaptor.addChild(root_0, root_1);
                }

            }

            retval.tree = root_0;
            }

            retval.stop = input.LT(-1);

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "declaracao_variaveis"

    public static class lista_parametros_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "lista_parametros"
    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:100:1: lista_parametros : id COLON tipo ( COMMA id COLON tipo )* -> ^( LIST_PARAM ( id tipo )+ ) ;
    public final gramaticaMM2Parser.lista_parametros_return lista_parametros() throws RecognitionException {
        gramaticaMM2Parser.lista_parametros_return retval = new gramaticaMM2Parser.lista_parametros_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token COLON39=null;
        Token COMMA41=null;
        Token COLON43=null;
        gramaticaMM2Parser.id_return id38 = null;

        gramaticaMM2Parser.tipo_return tipo40 = null;

        gramaticaMM2Parser.id_return id42 = null;

        gramaticaMM2Parser.tipo_return tipo44 = null;


        CommonTree COLON39_tree=null;
        CommonTree COMMA41_tree=null;
        CommonTree COLON43_tree=null;
        RewriteRuleTokenStream stream_COLON=new RewriteRuleTokenStream(adaptor,"token COLON");
        RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
        RewriteRuleSubtreeStream stream_id=new RewriteRuleSubtreeStream(adaptor,"rule id");
        RewriteRuleSubtreeStream stream_tipo=new RewriteRuleSubtreeStream(adaptor,"rule tipo");
        try {
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:100:18: ( id COLON tipo ( COMMA id COLON tipo )* -> ^( LIST_PARAM ( id tipo )+ ) )
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:100:20: id COLON tipo ( COMMA id COLON tipo )*
            {
            pushFollow(FOLLOW_id_in_lista_parametros809);
            id38=id();

            state._fsp--;

            stream_id.add(id38.getTree());
            COLON39=(Token)match(input,COLON,FOLLOW_COLON_in_lista_parametros811);  
            stream_COLON.add(COLON39);

            pushFollow(FOLLOW_tipo_in_lista_parametros813);
            tipo40=tipo();

            state._fsp--;

            stream_tipo.add(tipo40.getTree());
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:100:34: ( COMMA id COLON tipo )*
            loop8:
            do {
                int alt8=2;
                int LA8_0 = input.LA(1);

                if ( (LA8_0==COMMA) ) {
                    alt8=1;
                }


                switch (alt8) {
            	case 1 :
            	    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:100:35: COMMA id COLON tipo
            	    {
            	    COMMA41=(Token)match(input,COMMA,FOLLOW_COMMA_in_lista_parametros816);  
            	    stream_COMMA.add(COMMA41);

            	    pushFollow(FOLLOW_id_in_lista_parametros818);
            	    id42=id();

            	    state._fsp--;

            	    stream_id.add(id42.getTree());
            	    COLON43=(Token)match(input,COLON,FOLLOW_COLON_in_lista_parametros820);  
            	    stream_COLON.add(COLON43);

            	    pushFollow(FOLLOW_tipo_in_lista_parametros822);
            	    tipo44=tipo();

            	    state._fsp--;

            	    stream_tipo.add(tipo44.getTree());

            	    }
            	    break;

            	default :
            	    break loop8;
                }
            } while (true);



            // AST REWRITE
            // elements: tipo, id
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

            root_0 = (CommonTree)adaptor.nil();
            // 100:57: -> ^( LIST_PARAM ( id tipo )+ )
            {
                // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:100:60: ^( LIST_PARAM ( id tipo )+ )
                {
                CommonTree root_1 = (CommonTree)adaptor.nil();
                root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(LIST_PARAM, "LIST_PARAM"), root_1);

                if ( !(stream_tipo.hasNext()||stream_id.hasNext()) ) {
                    throw new RewriteEarlyExitException();
                }
                while ( stream_tipo.hasNext()||stream_id.hasNext() ) {
                    adaptor.addChild(root_1, stream_id.nextTree());
                    adaptor.addChild(root_1, stream_tipo.nextTree());

                }
                stream_tipo.reset();
                stream_id.reset();

                adaptor.addChild(root_0, root_1);
                }

            }

            retval.tree = root_0;
            }

            retval.stop = input.LT(-1);

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "lista_parametros"

    public static class tipo_array_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "tipo_array"
    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:103:1: tipo_array : ARRAY LEFT_BRACKET int_positivo DOT DOT int_positivo RIGHT_BRACKET OF tipo -> ^( TIPO_ARRAY int_positivo int_positivo tipo ) ;
    public final gramaticaMM2Parser.tipo_array_return tipo_array() throws RecognitionException {
        gramaticaMM2Parser.tipo_array_return retval = new gramaticaMM2Parser.tipo_array_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token ARRAY45=null;
        Token LEFT_BRACKET46=null;
        Token DOT48=null;
        Token DOT49=null;
        Token RIGHT_BRACKET51=null;
        Token OF52=null;
        gramaticaMM2Parser.int_positivo_return int_positivo47 = null;

        gramaticaMM2Parser.int_positivo_return int_positivo50 = null;

        gramaticaMM2Parser.tipo_return tipo53 = null;


        CommonTree ARRAY45_tree=null;
        CommonTree LEFT_BRACKET46_tree=null;
        CommonTree DOT48_tree=null;
        CommonTree DOT49_tree=null;
        CommonTree RIGHT_BRACKET51_tree=null;
        CommonTree OF52_tree=null;
        RewriteRuleTokenStream stream_DOT=new RewriteRuleTokenStream(adaptor,"token DOT");
        RewriteRuleTokenStream stream_OF=new RewriteRuleTokenStream(adaptor,"token OF");
        RewriteRuleTokenStream stream_ARRAY=new RewriteRuleTokenStream(adaptor,"token ARRAY");
        RewriteRuleTokenStream stream_LEFT_BRACKET=new RewriteRuleTokenStream(adaptor,"token LEFT_BRACKET");
        RewriteRuleTokenStream stream_RIGHT_BRACKET=new RewriteRuleTokenStream(adaptor,"token RIGHT_BRACKET");
        RewriteRuleSubtreeStream stream_int_positivo=new RewriteRuleSubtreeStream(adaptor,"rule int_positivo");
        RewriteRuleSubtreeStream stream_tipo=new RewriteRuleSubtreeStream(adaptor,"rule tipo");
        try {
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:103:12: ( ARRAY LEFT_BRACKET int_positivo DOT DOT int_positivo RIGHT_BRACKET OF tipo -> ^( TIPO_ARRAY int_positivo int_positivo tipo ) )
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:103:14: ARRAY LEFT_BRACKET int_positivo DOT DOT int_positivo RIGHT_BRACKET OF tipo
            {
            ARRAY45=(Token)match(input,ARRAY,FOLLOW_ARRAY_in_tipo_array849);  
            stream_ARRAY.add(ARRAY45);

            LEFT_BRACKET46=(Token)match(input,LEFT_BRACKET,FOLLOW_LEFT_BRACKET_in_tipo_array851);  
            stream_LEFT_BRACKET.add(LEFT_BRACKET46);

            pushFollow(FOLLOW_int_positivo_in_tipo_array853);
            int_positivo47=int_positivo();

            state._fsp--;

            stream_int_positivo.add(int_positivo47.getTree());
            DOT48=(Token)match(input,DOT,FOLLOW_DOT_in_tipo_array855);  
            stream_DOT.add(DOT48);

            DOT49=(Token)match(input,DOT,FOLLOW_DOT_in_tipo_array857);  
            stream_DOT.add(DOT49);

            pushFollow(FOLLOW_int_positivo_in_tipo_array859);
            int_positivo50=int_positivo();

            state._fsp--;

            stream_int_positivo.add(int_positivo50.getTree());
            RIGHT_BRACKET51=(Token)match(input,RIGHT_BRACKET,FOLLOW_RIGHT_BRACKET_in_tipo_array861);  
            stream_RIGHT_BRACKET.add(RIGHT_BRACKET51);

            OF52=(Token)match(input,OF,FOLLOW_OF_in_tipo_array863);  
            stream_OF.add(OF52);

            pushFollow(FOLLOW_tipo_in_tipo_array865);
            tipo53=tipo();

            state._fsp--;

            stream_tipo.add(tipo53.getTree());


            // AST REWRITE
            // elements: int_positivo, int_positivo, tipo
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

            root_0 = (CommonTree)adaptor.nil();
            // 103:89: -> ^( TIPO_ARRAY int_positivo int_positivo tipo )
            {
                // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:103:91: ^( TIPO_ARRAY int_positivo int_positivo tipo )
                {
                CommonTree root_1 = (CommonTree)adaptor.nil();
                root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(TIPO_ARRAY, "TIPO_ARRAY"), root_1);

                adaptor.addChild(root_1, stream_int_positivo.nextTree());
                adaptor.addChild(root_1, stream_int_positivo.nextTree());
                adaptor.addChild(root_1, stream_tipo.nextTree());

                adaptor.addChild(root_0, root_1);
                }

            }

            retval.tree = root_0;
            }

            retval.stop = input.LT(-1);

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "tipo_array"

    public static class tipo_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "tipo"
    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:105:1: tipo : denotador_tipo -> ^( TIPO denotador_tipo ) ;
    public final gramaticaMM2Parser.tipo_return tipo() throws RecognitionException {
        gramaticaMM2Parser.tipo_return retval = new gramaticaMM2Parser.tipo_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        gramaticaMM2Parser.denotador_tipo_return denotador_tipo54 = null;


        RewriteRuleSubtreeStream stream_denotador_tipo=new RewriteRuleSubtreeStream(adaptor,"rule denotador_tipo");
        try {
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:105:6: ( denotador_tipo -> ^( TIPO denotador_tipo ) )
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:105:8: denotador_tipo
            {
            pushFollow(FOLLOW_denotador_tipo_in_tipo885);
            denotador_tipo54=denotador_tipo();

            state._fsp--;

            stream_denotador_tipo.add(denotador_tipo54.getTree());


            // AST REWRITE
            // elements: denotador_tipo
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

            root_0 = (CommonTree)adaptor.nil();
            // 105:23: -> ^( TIPO denotador_tipo )
            {
                // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:105:25: ^( TIPO denotador_tipo )
                {
                CommonTree root_1 = (CommonTree)adaptor.nil();
                root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(TIPO, "TIPO"), root_1);

                adaptor.addChild(root_1, stream_denotador_tipo.nextTree());

                adaptor.addChild(root_0, root_1);
                }

            }

            retval.tree = root_0;
            }

            retval.stop = input.LT(-1);

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "tipo"

    public static class denotador_tipo_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "denotador_tipo"
    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:107:1: denotador_tipo : ( INTEGER | BOOLEAN | CHAR );
    public final gramaticaMM2Parser.denotador_tipo_return denotador_tipo() throws RecognitionException {
        gramaticaMM2Parser.denotador_tipo_return retval = new gramaticaMM2Parser.denotador_tipo_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token set55=null;

        CommonTree set55_tree=null;

        try {
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:107:16: ( INTEGER | BOOLEAN | CHAR )
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:
            {
            root_0 = (CommonTree)adaptor.nil();

            set55=(Token)input.LT(1);
            if ( (input.LA(1)>=INTEGER && input.LA(1)<=CHAR) ) {
                input.consume();
                adaptor.addChild(root_0, (CommonTree)adaptor.create(set55));
                state.errorRecovery=false;
            }
            else {
                MismatchedSetException mse = new MismatchedSetException(null,input);
                throw mse;
            }


            }

            retval.stop = input.LT(-1);

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "denotador_tipo"

    public static class lista_variaveis_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "lista_variaveis"
    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:110:1: lista_variaveis : id ( COMMA id )* COLON ( tipo SEMICOLON -> ^( LIST_VAR_ID ( id )+ tipo ) | tipo_array SEMICOLON -> ^( LIST_VAR_ARRAY ( id )+ tipo_array ) ) ;
    public final gramaticaMM2Parser.lista_variaveis_return lista_variaveis() throws RecognitionException {
        gramaticaMM2Parser.lista_variaveis_return retval = new gramaticaMM2Parser.lista_variaveis_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token COMMA57=null;
        Token COLON59=null;
        Token SEMICOLON61=null;
        Token SEMICOLON63=null;
        gramaticaMM2Parser.id_return id56 = null;

        gramaticaMM2Parser.id_return id58 = null;

        gramaticaMM2Parser.tipo_return tipo60 = null;

        gramaticaMM2Parser.tipo_array_return tipo_array62 = null;


        CommonTree COMMA57_tree=null;
        CommonTree COLON59_tree=null;
        CommonTree SEMICOLON61_tree=null;
        CommonTree SEMICOLON63_tree=null;
        RewriteRuleTokenStream stream_COLON=new RewriteRuleTokenStream(adaptor,"token COLON");
        RewriteRuleTokenStream stream_SEMICOLON=new RewriteRuleTokenStream(adaptor,"token SEMICOLON");
        RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
        RewriteRuleSubtreeStream stream_id=new RewriteRuleSubtreeStream(adaptor,"rule id");
        RewriteRuleSubtreeStream stream_tipo_array=new RewriteRuleSubtreeStream(adaptor,"rule tipo_array");
        RewriteRuleSubtreeStream stream_tipo=new RewriteRuleSubtreeStream(adaptor,"rule tipo");
        try {
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:110:18: ( id ( COMMA id )* COLON ( tipo SEMICOLON -> ^( LIST_VAR_ID ( id )+ tipo ) | tipo_array SEMICOLON -> ^( LIST_VAR_ARRAY ( id )+ tipo_array ) ) )
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:110:20: id ( COMMA id )* COLON ( tipo SEMICOLON -> ^( LIST_VAR_ID ( id )+ tipo ) | tipo_array SEMICOLON -> ^( LIST_VAR_ARRAY ( id )+ tipo_array ) )
            {
            pushFollow(FOLLOW_id_in_lista_variaveis919);
            id56=id();

            state._fsp--;

            stream_id.add(id56.getTree());
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:110:23: ( COMMA id )*
            loop9:
            do {
                int alt9=2;
                int LA9_0 = input.LA(1);

                if ( (LA9_0==COMMA) ) {
                    alt9=1;
                }


                switch (alt9) {
            	case 1 :
            	    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:110:24: COMMA id
            	    {
            	    COMMA57=(Token)match(input,COMMA,FOLLOW_COMMA_in_lista_variaveis922);  
            	    stream_COMMA.add(COMMA57);

            	    pushFollow(FOLLOW_id_in_lista_variaveis924);
            	    id58=id();

            	    state._fsp--;

            	    stream_id.add(id58.getTree());

            	    }
            	    break;

            	default :
            	    break loop9;
                }
            } while (true);

            COLON59=(Token)match(input,COLON,FOLLOW_COLON_in_lista_variaveis928);  
            stream_COLON.add(COLON59);

            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:110:41: ( tipo SEMICOLON -> ^( LIST_VAR_ID ( id )+ tipo ) | tipo_array SEMICOLON -> ^( LIST_VAR_ARRAY ( id )+ tipo_array ) )
            int alt10=2;
            int LA10_0 = input.LA(1);

            if ( ((LA10_0>=INTEGER && LA10_0<=CHAR)) ) {
                alt10=1;
            }
            else if ( (LA10_0==ARRAY) ) {
                alt10=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 10, 0, input);

                throw nvae;
            }
            switch (alt10) {
                case 1 :
                    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:110:42: tipo SEMICOLON
                    {
                    pushFollow(FOLLOW_tipo_in_lista_variaveis931);
                    tipo60=tipo();

                    state._fsp--;

                    stream_tipo.add(tipo60.getTree());
                    SEMICOLON61=(Token)match(input,SEMICOLON,FOLLOW_SEMICOLON_in_lista_variaveis933);  
                    stream_SEMICOLON.add(SEMICOLON61);



                    // AST REWRITE
                    // elements: id, tipo
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 110:57: -> ^( LIST_VAR_ID ( id )+ tipo )
                    {
                        // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:110:60: ^( LIST_VAR_ID ( id )+ tipo )
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(LIST_VAR_ID, "LIST_VAR_ID"), root_1);

                        if ( !(stream_id.hasNext()) ) {
                            throw new RewriteEarlyExitException();
                        }
                        while ( stream_id.hasNext() ) {
                            adaptor.addChild(root_1, stream_id.nextTree());

                        }
                        stream_id.reset();
                        adaptor.addChild(root_1, stream_tipo.nextTree());

                        adaptor.addChild(root_0, root_1);
                        }

                    }

                    retval.tree = root_0;
                    }
                    break;
                case 2 :
                    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:111:3: tipo_array SEMICOLON
                    {
                    pushFollow(FOLLOW_tipo_array_in_lista_variaveis948);
                    tipo_array62=tipo_array();

                    state._fsp--;

                    stream_tipo_array.add(tipo_array62.getTree());
                    SEMICOLON63=(Token)match(input,SEMICOLON,FOLLOW_SEMICOLON_in_lista_variaveis950);  
                    stream_SEMICOLON.add(SEMICOLON63);



                    // AST REWRITE
                    // elements: tipo_array, id
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 111:24: -> ^( LIST_VAR_ARRAY ( id )+ tipo_array )
                    {
                        // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:111:27: ^( LIST_VAR_ARRAY ( id )+ tipo_array )
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(LIST_VAR_ARRAY, "LIST_VAR_ARRAY"), root_1);

                        if ( !(stream_id.hasNext()) ) {
                            throw new RewriteEarlyExitException();
                        }
                        while ( stream_id.hasNext() ) {
                            adaptor.addChild(root_1, stream_id.nextTree());

                        }
                        stream_id.reset();
                        adaptor.addChild(root_1, stream_tipo_array.nextTree());

                        adaptor.addChild(root_0, root_1);
                        }

                    }

                    retval.tree = root_0;
                    }
                    break;

            }


            }

            retval.stop = input.LT(-1);

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "lista_variaveis"

    public static class corpo_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "corpo"
    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:113:1: corpo : BEGIN ( ( lista_comandos )* ) END -> ^( BODY ( lista_comandos )* ) ;
    public final gramaticaMM2Parser.corpo_return corpo() throws RecognitionException {
        gramaticaMM2Parser.corpo_return retval = new gramaticaMM2Parser.corpo_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token BEGIN64=null;
        Token END66=null;
        gramaticaMM2Parser.lista_comandos_return lista_comandos65 = null;


        CommonTree BEGIN64_tree=null;
        CommonTree END66_tree=null;
        RewriteRuleTokenStream stream_END=new RewriteRuleTokenStream(adaptor,"token END");
        RewriteRuleTokenStream stream_BEGIN=new RewriteRuleTokenStream(adaptor,"token BEGIN");
        RewriteRuleSubtreeStream stream_lista_comandos=new RewriteRuleSubtreeStream(adaptor,"rule lista_comandos");
        try {
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:113:7: ( BEGIN ( ( lista_comandos )* ) END -> ^( BODY ( lista_comandos )* ) )
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:113:9: BEGIN ( ( lista_comandos )* ) END
            {
            BEGIN64=(Token)match(input,BEGIN,FOLLOW_BEGIN_in_corpo975);  
            stream_BEGIN.add(BEGIN64);

            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:113:15: ( ( lista_comandos )* )
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:113:16: ( lista_comandos )*
            {
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:113:16: ( lista_comandos )*
            loop11:
            do {
                int alt11=2;
                int LA11_0 = input.LA(1);

                if ( (LA11_0==IF||(LA11_0>=CASE && LA11_0<=WHILE)||(LA11_0>=WRITEINT && LA11_0<=WRITELN)||LA11_0==LETTER) ) {
                    alt11=1;
                }


                switch (alt11) {
            	case 1 :
            	    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:113:16: lista_comandos
            	    {
            	    pushFollow(FOLLOW_lista_comandos_in_corpo978);
            	    lista_comandos65=lista_comandos();

            	    state._fsp--;

            	    stream_lista_comandos.add(lista_comandos65.getTree());

            	    }
            	    break;

            	default :
            	    break loop11;
                }
            } while (true);


            }

            END66=(Token)match(input,END,FOLLOW_END_in_corpo982);  
            stream_END.add(END66);



            // AST REWRITE
            // elements: lista_comandos
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

            root_0 = (CommonTree)adaptor.nil();
            // 113:37: -> ^( BODY ( lista_comandos )* )
            {
                // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:113:40: ^( BODY ( lista_comandos )* )
                {
                CommonTree root_1 = (CommonTree)adaptor.nil();
                root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(BODY, "BODY"), root_1);

                // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:113:47: ( lista_comandos )*
                while ( stream_lista_comandos.hasNext() ) {
                    adaptor.addChild(root_1, stream_lista_comandos.nextTree());

                }
                stream_lista_comandos.reset();

                adaptor.addChild(root_0, root_1);
                }

            }

            retval.tree = root_0;
            }

            retval.stop = input.LT(-1);

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "corpo"

    public static class corpo_return_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "corpo_return"
    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:115:1: corpo_return : BEGIN ( ( lista_comandos )* ) RETURN expressao SEMICOLON END -> ^( BODY_RETURN ( lista_comandos )* expressao ) ;
    public final gramaticaMM2Parser.corpo_return_return corpo_return() throws RecognitionException {
        gramaticaMM2Parser.corpo_return_return retval = new gramaticaMM2Parser.corpo_return_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token BEGIN67=null;
        Token RETURN69=null;
        Token SEMICOLON71=null;
        Token END72=null;
        gramaticaMM2Parser.lista_comandos_return lista_comandos68 = null;

        gramaticaMM2Parser.expressao_return expressao70 = null;


        CommonTree BEGIN67_tree=null;
        CommonTree RETURN69_tree=null;
        CommonTree SEMICOLON71_tree=null;
        CommonTree END72_tree=null;
        RewriteRuleTokenStream stream_SEMICOLON=new RewriteRuleTokenStream(adaptor,"token SEMICOLON");
        RewriteRuleTokenStream stream_END=new RewriteRuleTokenStream(adaptor,"token END");
        RewriteRuleTokenStream stream_BEGIN=new RewriteRuleTokenStream(adaptor,"token BEGIN");
        RewriteRuleTokenStream stream_RETURN=new RewriteRuleTokenStream(adaptor,"token RETURN");
        RewriteRuleSubtreeStream stream_lista_comandos=new RewriteRuleSubtreeStream(adaptor,"rule lista_comandos");
        RewriteRuleSubtreeStream stream_expressao=new RewriteRuleSubtreeStream(adaptor,"rule expressao");
        try {
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:115:16: ( BEGIN ( ( lista_comandos )* ) RETURN expressao SEMICOLON END -> ^( BODY_RETURN ( lista_comandos )* expressao ) )
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:115:20: BEGIN ( ( lista_comandos )* ) RETURN expressao SEMICOLON END
            {
            BEGIN67=(Token)match(input,BEGIN,FOLLOW_BEGIN_in_corpo_return1003);  
            stream_BEGIN.add(BEGIN67);

            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:115:26: ( ( lista_comandos )* )
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:115:27: ( lista_comandos )*
            {
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:115:27: ( lista_comandos )*
            loop12:
            do {
                int alt12=2;
                int LA12_0 = input.LA(1);

                if ( (LA12_0==IF||(LA12_0>=CASE && LA12_0<=WHILE)||(LA12_0>=WRITEINT && LA12_0<=WRITELN)||LA12_0==LETTER) ) {
                    alt12=1;
                }


                switch (alt12) {
            	case 1 :
            	    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:115:27: lista_comandos
            	    {
            	    pushFollow(FOLLOW_lista_comandos_in_corpo_return1006);
            	    lista_comandos68=lista_comandos();

            	    state._fsp--;

            	    stream_lista_comandos.add(lista_comandos68.getTree());

            	    }
            	    break;

            	default :
            	    break loop12;
                }
            } while (true);


            }

            RETURN69=(Token)match(input,RETURN,FOLLOW_RETURN_in_corpo_return1010);  
            stream_RETURN.add(RETURN69);

            pushFollow(FOLLOW_expressao_in_corpo_return1012);
            expressao70=expressao();

            state._fsp--;

            stream_expressao.add(expressao70.getTree());
            SEMICOLON71=(Token)match(input,SEMICOLON,FOLLOW_SEMICOLON_in_corpo_return1014);  
            stream_SEMICOLON.add(SEMICOLON71);

            END72=(Token)match(input,END,FOLLOW_END_in_corpo_return1016);  
            stream_END.add(END72);



            // AST REWRITE
            // elements: lista_comandos, expressao
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

            root_0 = (CommonTree)adaptor.nil();
            // 115:74: -> ^( BODY_RETURN ( lista_comandos )* expressao )
            {
                // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:116:3: ^( BODY_RETURN ( lista_comandos )* expressao )
                {
                CommonTree root_1 = (CommonTree)adaptor.nil();
                root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(BODY_RETURN, "BODY_RETURN"), root_1);

                // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:116:17: ( lista_comandos )*
                while ( stream_lista_comandos.hasNext() ) {
                    adaptor.addChild(root_1, stream_lista_comandos.nextTree());

                }
                stream_lista_comandos.reset();
                adaptor.addChild(root_1, stream_expressao.nextTree());

                adaptor.addChild(root_0, root_1);
                }

            }

            retval.tree = root_0;
            }

            retval.stop = input.LT(-1);

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "corpo_return"

    public static class lista_comandos_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "lista_comandos"
    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:119:1: lista_comandos : ( id ASSIGN expressao SEMICOLON -> ^( ASSIGN_COMMAND_ID id expressao ) | id_array ASSIGN expressao SEMICOLON -> ^( ASSIGN_COMMAND_ID_ARRAY id_array expressao ) | procedure_chamada SEMICOLON -> ^( CALL_COMMAND procedure_chamada ) | IF expressao THEN ( lista_comandos )? ( | ELSE ( lista_comandos )? ) END SEMICOLON -> ^( IF_COMMAND expressao ( lista_comandos )? ( lista_comandos )? ) | FOR id ASSIGN expressao TO expressao BY expressao DO ( lista_comandos )? END SEMICOLON -> ^( FOR_COMMAND id expressao expressao expressao ( lista_comandos )? ) | WHILE expressao DO ( lista_comandos )? END SEMICOLON -> ^( WHILE_COMMAND expressao ( lista_comandos )? ) | CASE id OF lista_numeros COLON ( lista_comandos )? ( BAR lista_numeros COLON ( lista_comandos )? )* ELSE ( lista_comandos )? END SEMICOLON -> ^( CASE_COMMAND id ( lista_numeros ( lista_comandos )? )+ ( lista_comandos )? ) | WRITEINT LEFT_PAREN expressao RIGHT_PAREN SEMICOLON -> ^( WRITEINT_COMMAND expressao ) | WRITECHAR LEFT_PAREN expressao RIGHT_PAREN SEMICOLON -> ^( WRITECHAR_COMMAND expressao ) | WRITEBOOL LEFT_PAREN expressao RIGHT_PAREN SEMICOLON -> ^( WRITEBOOL_COMMAND expressao ) | WRITELN SEMICOLON -> ^( WRITELN_COMMAND ) | WRITESTRING LEFT_PAREN string RIGHT_PAREN SEMICOLON -> ^( WRITESTRING_COMMAND string ) );
    public final gramaticaMM2Parser.lista_comandos_return lista_comandos() throws RecognitionException {
        gramaticaMM2Parser.lista_comandos_return retval = new gramaticaMM2Parser.lista_comandos_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token ASSIGN74=null;
        Token SEMICOLON76=null;
        Token ASSIGN78=null;
        Token SEMICOLON80=null;
        Token SEMICOLON82=null;
        Token IF83=null;
        Token THEN85=null;
        Token ELSE87=null;
        Token END89=null;
        Token SEMICOLON90=null;
        Token FOR91=null;
        Token ASSIGN93=null;
        Token TO95=null;
        Token BY97=null;
        Token DO99=null;
        Token END101=null;
        Token SEMICOLON102=null;
        Token WHILE103=null;
        Token DO105=null;
        Token END107=null;
        Token SEMICOLON108=null;
        Token CASE109=null;
        Token OF111=null;
        Token COLON113=null;
        Token BAR115=null;
        Token COLON117=null;
        Token ELSE119=null;
        Token END121=null;
        Token SEMICOLON122=null;
        Token WRITEINT123=null;
        Token LEFT_PAREN124=null;
        Token RIGHT_PAREN126=null;
        Token SEMICOLON127=null;
        Token WRITECHAR128=null;
        Token LEFT_PAREN129=null;
        Token RIGHT_PAREN131=null;
        Token SEMICOLON132=null;
        Token WRITEBOOL133=null;
        Token LEFT_PAREN134=null;
        Token RIGHT_PAREN136=null;
        Token SEMICOLON137=null;
        Token WRITELN138=null;
        Token SEMICOLON139=null;
        Token WRITESTRING140=null;
        Token LEFT_PAREN141=null;
        Token RIGHT_PAREN143=null;
        Token SEMICOLON144=null;
        gramaticaMM2Parser.id_return id73 = null;

        gramaticaMM2Parser.expressao_return expressao75 = null;

        gramaticaMM2Parser.id_array_return id_array77 = null;

        gramaticaMM2Parser.expressao_return expressao79 = null;

        gramaticaMM2Parser.procedure_chamada_return procedure_chamada81 = null;

        gramaticaMM2Parser.expressao_return expressao84 = null;

        gramaticaMM2Parser.lista_comandos_return lista_comandos86 = null;

        gramaticaMM2Parser.lista_comandos_return lista_comandos88 = null;

        gramaticaMM2Parser.id_return id92 = null;

        gramaticaMM2Parser.expressao_return expressao94 = null;

        gramaticaMM2Parser.expressao_return expressao96 = null;

        gramaticaMM2Parser.expressao_return expressao98 = null;

        gramaticaMM2Parser.lista_comandos_return lista_comandos100 = null;

        gramaticaMM2Parser.expressao_return expressao104 = null;

        gramaticaMM2Parser.lista_comandos_return lista_comandos106 = null;

        gramaticaMM2Parser.id_return id110 = null;

        gramaticaMM2Parser.lista_numeros_return lista_numeros112 = null;

        gramaticaMM2Parser.lista_comandos_return lista_comandos114 = null;

        gramaticaMM2Parser.lista_numeros_return lista_numeros116 = null;

        gramaticaMM2Parser.lista_comandos_return lista_comandos118 = null;

        gramaticaMM2Parser.lista_comandos_return lista_comandos120 = null;

        gramaticaMM2Parser.expressao_return expressao125 = null;

        gramaticaMM2Parser.expressao_return expressao130 = null;

        gramaticaMM2Parser.expressao_return expressao135 = null;

        gramaticaMM2Parser.string_return string142 = null;


        CommonTree ASSIGN74_tree=null;
        CommonTree SEMICOLON76_tree=null;
        CommonTree ASSIGN78_tree=null;
        CommonTree SEMICOLON80_tree=null;
        CommonTree SEMICOLON82_tree=null;
        CommonTree IF83_tree=null;
        CommonTree THEN85_tree=null;
        CommonTree ELSE87_tree=null;
        CommonTree END89_tree=null;
        CommonTree SEMICOLON90_tree=null;
        CommonTree FOR91_tree=null;
        CommonTree ASSIGN93_tree=null;
        CommonTree TO95_tree=null;
        CommonTree BY97_tree=null;
        CommonTree DO99_tree=null;
        CommonTree END101_tree=null;
        CommonTree SEMICOLON102_tree=null;
        CommonTree WHILE103_tree=null;
        CommonTree DO105_tree=null;
        CommonTree END107_tree=null;
        CommonTree SEMICOLON108_tree=null;
        CommonTree CASE109_tree=null;
        CommonTree OF111_tree=null;
        CommonTree COLON113_tree=null;
        CommonTree BAR115_tree=null;
        CommonTree COLON117_tree=null;
        CommonTree ELSE119_tree=null;
        CommonTree END121_tree=null;
        CommonTree SEMICOLON122_tree=null;
        CommonTree WRITEINT123_tree=null;
        CommonTree LEFT_PAREN124_tree=null;
        CommonTree RIGHT_PAREN126_tree=null;
        CommonTree SEMICOLON127_tree=null;
        CommonTree WRITECHAR128_tree=null;
        CommonTree LEFT_PAREN129_tree=null;
        CommonTree RIGHT_PAREN131_tree=null;
        CommonTree SEMICOLON132_tree=null;
        CommonTree WRITEBOOL133_tree=null;
        CommonTree LEFT_PAREN134_tree=null;
        CommonTree RIGHT_PAREN136_tree=null;
        CommonTree SEMICOLON137_tree=null;
        CommonTree WRITELN138_tree=null;
        CommonTree SEMICOLON139_tree=null;
        CommonTree WRITESTRING140_tree=null;
        CommonTree LEFT_PAREN141_tree=null;
        CommonTree RIGHT_PAREN143_tree=null;
        CommonTree SEMICOLON144_tree=null;
        RewriteRuleTokenStream stream_COLON=new RewriteRuleTokenStream(adaptor,"token COLON");
        RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
        RewriteRuleTokenStream stream_BY=new RewriteRuleTokenStream(adaptor,"token BY");
        RewriteRuleTokenStream stream_THEN=new RewriteRuleTokenStream(adaptor,"token THEN");
        RewriteRuleTokenStream stream_WRITELN=new RewriteRuleTokenStream(adaptor,"token WRITELN");
        RewriteRuleTokenStream stream_WHILE=new RewriteRuleTokenStream(adaptor,"token WHILE");
        RewriteRuleTokenStream stream_TO=new RewriteRuleTokenStream(adaptor,"token TO");
        RewriteRuleTokenStream stream_WRITEBOOL=new RewriteRuleTokenStream(adaptor,"token WRITEBOOL");
        RewriteRuleTokenStream stream_WRITECHAR=new RewriteRuleTokenStream(adaptor,"token WRITECHAR");
        RewriteRuleTokenStream stream_ELSE=new RewriteRuleTokenStream(adaptor,"token ELSE");
        RewriteRuleTokenStream stream_CASE=new RewriteRuleTokenStream(adaptor,"token CASE");
        RewriteRuleTokenStream stream_ASSIGN=new RewriteRuleTokenStream(adaptor,"token ASSIGN");
        RewriteRuleTokenStream stream_WRITESTRING=new RewriteRuleTokenStream(adaptor,"token WRITESTRING");
        RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
        RewriteRuleTokenStream stream_WRITEINT=new RewriteRuleTokenStream(adaptor,"token WRITEINT");
        RewriteRuleTokenStream stream_DO=new RewriteRuleTokenStream(adaptor,"token DO");
        RewriteRuleTokenStream stream_FOR=new RewriteRuleTokenStream(adaptor,"token FOR");
        RewriteRuleTokenStream stream_SEMICOLON=new RewriteRuleTokenStream(adaptor,"token SEMICOLON");
        RewriteRuleTokenStream stream_END=new RewriteRuleTokenStream(adaptor,"token END");
        RewriteRuleTokenStream stream_OF=new RewriteRuleTokenStream(adaptor,"token OF");
        RewriteRuleTokenStream stream_BAR=new RewriteRuleTokenStream(adaptor,"token BAR");
        RewriteRuleTokenStream stream_IF=new RewriteRuleTokenStream(adaptor,"token IF");
        RewriteRuleSubtreeStream stream_id=new RewriteRuleSubtreeStream(adaptor,"rule id");
        RewriteRuleSubtreeStream stream_lista_comandos=new RewriteRuleSubtreeStream(adaptor,"rule lista_comandos");
        RewriteRuleSubtreeStream stream_procedure_chamada=new RewriteRuleSubtreeStream(adaptor,"rule procedure_chamada");
        RewriteRuleSubtreeStream stream_string=new RewriteRuleSubtreeStream(adaptor,"rule string");
        RewriteRuleSubtreeStream stream_id_array=new RewriteRuleSubtreeStream(adaptor,"rule id_array");
        RewriteRuleSubtreeStream stream_lista_numeros=new RewriteRuleSubtreeStream(adaptor,"rule lista_numeros");
        RewriteRuleSubtreeStream stream_expressao=new RewriteRuleSubtreeStream(adaptor,"rule expressao");
        try {
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:119:16: ( id ASSIGN expressao SEMICOLON -> ^( ASSIGN_COMMAND_ID id expressao ) | id_array ASSIGN expressao SEMICOLON -> ^( ASSIGN_COMMAND_ID_ARRAY id_array expressao ) | procedure_chamada SEMICOLON -> ^( CALL_COMMAND procedure_chamada ) | IF expressao THEN ( lista_comandos )? ( | ELSE ( lista_comandos )? ) END SEMICOLON -> ^( IF_COMMAND expressao ( lista_comandos )? ( lista_comandos )? ) | FOR id ASSIGN expressao TO expressao BY expressao DO ( lista_comandos )? END SEMICOLON -> ^( FOR_COMMAND id expressao expressao expressao ( lista_comandos )? ) | WHILE expressao DO ( lista_comandos )? END SEMICOLON -> ^( WHILE_COMMAND expressao ( lista_comandos )? ) | CASE id OF lista_numeros COLON ( lista_comandos )? ( BAR lista_numeros COLON ( lista_comandos )? )* ELSE ( lista_comandos )? END SEMICOLON -> ^( CASE_COMMAND id ( lista_numeros ( lista_comandos )? )+ ( lista_comandos )? ) | WRITEINT LEFT_PAREN expressao RIGHT_PAREN SEMICOLON -> ^( WRITEINT_COMMAND expressao ) | WRITECHAR LEFT_PAREN expressao RIGHT_PAREN SEMICOLON -> ^( WRITECHAR_COMMAND expressao ) | WRITEBOOL LEFT_PAREN expressao RIGHT_PAREN SEMICOLON -> ^( WRITEBOOL_COMMAND expressao ) | WRITELN SEMICOLON -> ^( WRITELN_COMMAND ) | WRITESTRING LEFT_PAREN string RIGHT_PAREN SEMICOLON -> ^( WRITESTRING_COMMAND string ) )
            int alt22=12;
            alt22 = dfa22.predict(input);
            switch (alt22) {
                case 1 :
                    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:119:19: id ASSIGN expressao SEMICOLON
                    {
                    pushFollow(FOLLOW_id_in_lista_comandos1040);
                    id73=id();

                    state._fsp--;

                    stream_id.add(id73.getTree());
                    ASSIGN74=(Token)match(input,ASSIGN,FOLLOW_ASSIGN_in_lista_comandos1043);  
                    stream_ASSIGN.add(ASSIGN74);

                    pushFollow(FOLLOW_expressao_in_lista_comandos1045);
                    expressao75=expressao();

                    state._fsp--;

                    stream_expressao.add(expressao75.getTree());
                    SEMICOLON76=(Token)match(input,SEMICOLON,FOLLOW_SEMICOLON_in_lista_comandos1047);  
                    stream_SEMICOLON.add(SEMICOLON76);



                    // AST REWRITE
                    // elements: expressao, id
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 119:50: -> ^( ASSIGN_COMMAND_ID id expressao )
                    {
                        // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:119:53: ^( ASSIGN_COMMAND_ID id expressao )
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(ASSIGN_COMMAND_ID, "ASSIGN_COMMAND_ID"), root_1);

                        adaptor.addChild(root_1, stream_id.nextTree());
                        adaptor.addChild(root_1, stream_expressao.nextTree());

                        adaptor.addChild(root_0, root_1);
                        }

                    }

                    retval.tree = root_0;
                    }
                    break;
                case 2 :
                    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:120:5: id_array ASSIGN expressao SEMICOLON
                    {
                    pushFollow(FOLLOW_id_array_in_lista_comandos1063);
                    id_array77=id_array();

                    state._fsp--;

                    stream_id_array.add(id_array77.getTree());
                    ASSIGN78=(Token)match(input,ASSIGN,FOLLOW_ASSIGN_in_lista_comandos1065);  
                    stream_ASSIGN.add(ASSIGN78);

                    pushFollow(FOLLOW_expressao_in_lista_comandos1067);
                    expressao79=expressao();

                    state._fsp--;

                    stream_expressao.add(expressao79.getTree());
                    SEMICOLON80=(Token)match(input,SEMICOLON,FOLLOW_SEMICOLON_in_lista_comandos1069);  
                    stream_SEMICOLON.add(SEMICOLON80);



                    // AST REWRITE
                    // elements: id_array, expressao
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 120:41: -> ^( ASSIGN_COMMAND_ID_ARRAY id_array expressao )
                    {
                        // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:120:44: ^( ASSIGN_COMMAND_ID_ARRAY id_array expressao )
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(ASSIGN_COMMAND_ID_ARRAY, "ASSIGN_COMMAND_ID_ARRAY"), root_1);

                        adaptor.addChild(root_1, stream_id_array.nextTree());
                        adaptor.addChild(root_1, stream_expressao.nextTree());

                        adaptor.addChild(root_0, root_1);
                        }

                    }

                    retval.tree = root_0;
                    }
                    break;
                case 3 :
                    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:121:6: procedure_chamada SEMICOLON
                    {
                    pushFollow(FOLLOW_procedure_chamada_in_lista_comandos1086);
                    procedure_chamada81=procedure_chamada();

                    state._fsp--;

                    stream_procedure_chamada.add(procedure_chamada81.getTree());
                    SEMICOLON82=(Token)match(input,SEMICOLON,FOLLOW_SEMICOLON_in_lista_comandos1088);  
                    stream_SEMICOLON.add(SEMICOLON82);



                    // AST REWRITE
                    // elements: procedure_chamada
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 121:34: -> ^( CALL_COMMAND procedure_chamada )
                    {
                        // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:121:37: ^( CALL_COMMAND procedure_chamada )
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(CALL_COMMAND, "CALL_COMMAND"), root_1);

                        adaptor.addChild(root_1, stream_procedure_chamada.nextTree());

                        adaptor.addChild(root_0, root_1);
                        }

                    }

                    retval.tree = root_0;
                    }
                    break;
                case 4 :
                    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:122:6: IF expressao THEN ( lista_comandos )? ( | ELSE ( lista_comandos )? ) END SEMICOLON
                    {
                    IF83=(Token)match(input,IF,FOLLOW_IF_in_lista_comandos1103);  
                    stream_IF.add(IF83);

                    pushFollow(FOLLOW_expressao_in_lista_comandos1105);
                    expressao84=expressao();

                    state._fsp--;

                    stream_expressao.add(expressao84.getTree());
                    THEN85=(Token)match(input,THEN,FOLLOW_THEN_in_lista_comandos1107);  
                    stream_THEN.add(THEN85);

                    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:122:24: ( lista_comandos )?
                    int alt13=2;
                    int LA13_0 = input.LA(1);

                    if ( (LA13_0==IF||(LA13_0>=CASE && LA13_0<=WHILE)||(LA13_0>=WRITEINT && LA13_0<=WRITELN)||LA13_0==LETTER) ) {
                        alt13=1;
                    }
                    switch (alt13) {
                        case 1 :
                            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:122:24: lista_comandos
                            {
                            pushFollow(FOLLOW_lista_comandos_in_lista_comandos1109);
                            lista_comandos86=lista_comandos();

                            state._fsp--;

                            stream_lista_comandos.add(lista_comandos86.getTree());

                            }
                            break;

                    }

                    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:122:40: ( | ELSE ( lista_comandos )? )
                    int alt15=2;
                    int LA15_0 = input.LA(1);

                    if ( (LA15_0==END) ) {
                        alt15=1;
                    }
                    else if ( (LA15_0==ELSE) ) {
                        alt15=2;
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("", 15, 0, input);

                        throw nvae;
                    }
                    switch (alt15) {
                        case 1 :
                            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:122:41: 
                            {
                            }
                            break;
                        case 2 :
                            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:122:43: ELSE ( lista_comandos )?
                            {
                            ELSE87=(Token)match(input,ELSE,FOLLOW_ELSE_in_lista_comandos1115);  
                            stream_ELSE.add(ELSE87);

                            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:122:48: ( lista_comandos )?
                            int alt14=2;
                            int LA14_0 = input.LA(1);

                            if ( (LA14_0==IF||(LA14_0>=CASE && LA14_0<=WHILE)||(LA14_0>=WRITEINT && LA14_0<=WRITELN)||LA14_0==LETTER) ) {
                                alt14=1;
                            }
                            switch (alt14) {
                                case 1 :
                                    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:122:48: lista_comandos
                                    {
                                    pushFollow(FOLLOW_lista_comandos_in_lista_comandos1117);
                                    lista_comandos88=lista_comandos();

                                    state._fsp--;

                                    stream_lista_comandos.add(lista_comandos88.getTree());

                                    }
                                    break;

                            }


                            }
                            break;

                    }

                    END89=(Token)match(input,END,FOLLOW_END_in_lista_comandos1121);  
                    stream_END.add(END89);

                    SEMICOLON90=(Token)match(input,SEMICOLON,FOLLOW_SEMICOLON_in_lista_comandos1123);  
                    stream_SEMICOLON.add(SEMICOLON90);



                    // AST REWRITE
                    // elements: lista_comandos, expressao, lista_comandos
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 122:79: -> ^( IF_COMMAND expressao ( lista_comandos )? ( lista_comandos )? )
                    {
                        // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:122:82: ^( IF_COMMAND expressao ( lista_comandos )? ( lista_comandos )? )
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(IF_COMMAND, "IF_COMMAND"), root_1);

                        adaptor.addChild(root_1, stream_expressao.nextTree());
                        // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:122:105: ( lista_comandos )?
                        if ( stream_lista_comandos.hasNext() ) {
                            adaptor.addChild(root_1, stream_lista_comandos.nextTree());

                        }
                        stream_lista_comandos.reset();
                        // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:122:121: ( lista_comandos )?
                        if ( stream_lista_comandos.hasNext() ) {
                            adaptor.addChild(root_1, stream_lista_comandos.nextTree());

                        }
                        stream_lista_comandos.reset();

                        adaptor.addChild(root_0, root_1);
                        }

                    }

                    retval.tree = root_0;
                    }
                    break;
                case 5 :
                    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:123:6: FOR id ASSIGN expressao TO expressao BY expressao DO ( lista_comandos )? END SEMICOLON
                    {
                    FOR91=(Token)match(input,FOR,FOLLOW_FOR_in_lista_comandos1144);  
                    stream_FOR.add(FOR91);

                    pushFollow(FOLLOW_id_in_lista_comandos1146);
                    id92=id();

                    state._fsp--;

                    stream_id.add(id92.getTree());
                    ASSIGN93=(Token)match(input,ASSIGN,FOLLOW_ASSIGN_in_lista_comandos1148);  
                    stream_ASSIGN.add(ASSIGN93);

                    pushFollow(FOLLOW_expressao_in_lista_comandos1150);
                    expressao94=expressao();

                    state._fsp--;

                    stream_expressao.add(expressao94.getTree());
                    TO95=(Token)match(input,TO,FOLLOW_TO_in_lista_comandos1152);  
                    stream_TO.add(TO95);

                    pushFollow(FOLLOW_expressao_in_lista_comandos1154);
                    expressao96=expressao();

                    state._fsp--;

                    stream_expressao.add(expressao96.getTree());
                    BY97=(Token)match(input,BY,FOLLOW_BY_in_lista_comandos1156);  
                    stream_BY.add(BY97);

                    pushFollow(FOLLOW_expressao_in_lista_comandos1158);
                    expressao98=expressao();

                    state._fsp--;

                    stream_expressao.add(expressao98.getTree());
                    DO99=(Token)match(input,DO,FOLLOW_DO_in_lista_comandos1160);  
                    stream_DO.add(DO99);

                    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:123:59: ( lista_comandos )?
                    int alt16=2;
                    int LA16_0 = input.LA(1);

                    if ( (LA16_0==IF||(LA16_0>=CASE && LA16_0<=WHILE)||(LA16_0>=WRITEINT && LA16_0<=WRITELN)||LA16_0==LETTER) ) {
                        alt16=1;
                    }
                    switch (alt16) {
                        case 1 :
                            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:123:59: lista_comandos
                            {
                            pushFollow(FOLLOW_lista_comandos_in_lista_comandos1162);
                            lista_comandos100=lista_comandos();

                            state._fsp--;

                            stream_lista_comandos.add(lista_comandos100.getTree());

                            }
                            break;

                    }

                    END101=(Token)match(input,END,FOLLOW_END_in_lista_comandos1165);  
                    stream_END.add(END101);

                    SEMICOLON102=(Token)match(input,SEMICOLON,FOLLOW_SEMICOLON_in_lista_comandos1167);  
                    stream_SEMICOLON.add(SEMICOLON102);



                    // AST REWRITE
                    // elements: lista_comandos, expressao, id, expressao, expressao
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 123:89: -> ^( FOR_COMMAND id expressao expressao expressao ( lista_comandos )? )
                    {
                        // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:123:92: ^( FOR_COMMAND id expressao expressao expressao ( lista_comandos )? )
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(FOR_COMMAND, "FOR_COMMAND"), root_1);

                        adaptor.addChild(root_1, stream_id.nextTree());
                        adaptor.addChild(root_1, stream_expressao.nextTree());
                        adaptor.addChild(root_1, stream_expressao.nextTree());
                        adaptor.addChild(root_1, stream_expressao.nextTree());
                        // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:123:139: ( lista_comandos )?
                        if ( stream_lista_comandos.hasNext() ) {
                            adaptor.addChild(root_1, stream_lista_comandos.nextTree());

                        }
                        stream_lista_comandos.reset();

                        adaptor.addChild(root_0, root_1);
                        }

                    }

                    retval.tree = root_0;
                    }
                    break;
                case 6 :
                    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:124:6: WHILE expressao DO ( lista_comandos )? END SEMICOLON
                    {
                    WHILE103=(Token)match(input,WHILE,FOLLOW_WHILE_in_lista_comandos1191);  
                    stream_WHILE.add(WHILE103);

                    pushFollow(FOLLOW_expressao_in_lista_comandos1193);
                    expressao104=expressao();

                    state._fsp--;

                    stream_expressao.add(expressao104.getTree());
                    DO105=(Token)match(input,DO,FOLLOW_DO_in_lista_comandos1195);  
                    stream_DO.add(DO105);

                    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:124:25: ( lista_comandos )?
                    int alt17=2;
                    int LA17_0 = input.LA(1);

                    if ( (LA17_0==IF||(LA17_0>=CASE && LA17_0<=WHILE)||(LA17_0>=WRITEINT && LA17_0<=WRITELN)||LA17_0==LETTER) ) {
                        alt17=1;
                    }
                    switch (alt17) {
                        case 1 :
                            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:124:25: lista_comandos
                            {
                            pushFollow(FOLLOW_lista_comandos_in_lista_comandos1197);
                            lista_comandos106=lista_comandos();

                            state._fsp--;

                            stream_lista_comandos.add(lista_comandos106.getTree());

                            }
                            break;

                    }

                    END107=(Token)match(input,END,FOLLOW_END_in_lista_comandos1200);  
                    stream_END.add(END107);

                    SEMICOLON108=(Token)match(input,SEMICOLON,FOLLOW_SEMICOLON_in_lista_comandos1202);  
                    stream_SEMICOLON.add(SEMICOLON108);



                    // AST REWRITE
                    // elements: expressao, lista_comandos
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 124:55: -> ^( WHILE_COMMAND expressao ( lista_comandos )? )
                    {
                        // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:124:58: ^( WHILE_COMMAND expressao ( lista_comandos )? )
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(WHILE_COMMAND, "WHILE_COMMAND"), root_1);

                        adaptor.addChild(root_1, stream_expressao.nextTree());
                        // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:124:84: ( lista_comandos )?
                        if ( stream_lista_comandos.hasNext() ) {
                            adaptor.addChild(root_1, stream_lista_comandos.nextTree());

                        }
                        stream_lista_comandos.reset();

                        adaptor.addChild(root_0, root_1);
                        }

                    }

                    retval.tree = root_0;
                    }
                    break;
                case 7 :
                    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:125:6: CASE id OF lista_numeros COLON ( lista_comandos )? ( BAR lista_numeros COLON ( lista_comandos )? )* ELSE ( lista_comandos )? END SEMICOLON
                    {
                    CASE109=(Token)match(input,CASE,FOLLOW_CASE_in_lista_comandos1220);  
                    stream_CASE.add(CASE109);

                    pushFollow(FOLLOW_id_in_lista_comandos1222);
                    id110=id();

                    state._fsp--;

                    stream_id.add(id110.getTree());
                    OF111=(Token)match(input,OF,FOLLOW_OF_in_lista_comandos1224);  
                    stream_OF.add(OF111);

                    pushFollow(FOLLOW_lista_numeros_in_lista_comandos1226);
                    lista_numeros112=lista_numeros();

                    state._fsp--;

                    stream_lista_numeros.add(lista_numeros112.getTree());
                    COLON113=(Token)match(input,COLON,FOLLOW_COLON_in_lista_comandos1228);  
                    stream_COLON.add(COLON113);

                    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:125:37: ( lista_comandos )?
                    int alt18=2;
                    int LA18_0 = input.LA(1);

                    if ( (LA18_0==IF||(LA18_0>=CASE && LA18_0<=WHILE)||(LA18_0>=WRITEINT && LA18_0<=WRITELN)||LA18_0==LETTER) ) {
                        alt18=1;
                    }
                    switch (alt18) {
                        case 1 :
                            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:125:37: lista_comandos
                            {
                            pushFollow(FOLLOW_lista_comandos_in_lista_comandos1230);
                            lista_comandos114=lista_comandos();

                            state._fsp--;

                            stream_lista_comandos.add(lista_comandos114.getTree());

                            }
                            break;

                    }

                    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:125:52: ( BAR lista_numeros COLON ( lista_comandos )? )*
                    loop20:
                    do {
                        int alt20=2;
                        int LA20_0 = input.LA(1);

                        if ( (LA20_0==BAR) ) {
                            alt20=1;
                        }


                        switch (alt20) {
                    	case 1 :
                    	    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:125:53: BAR lista_numeros COLON ( lista_comandos )?
                    	    {
                    	    BAR115=(Token)match(input,BAR,FOLLOW_BAR_in_lista_comandos1233);  
                    	    stream_BAR.add(BAR115);

                    	    pushFollow(FOLLOW_lista_numeros_in_lista_comandos1235);
                    	    lista_numeros116=lista_numeros();

                    	    state._fsp--;

                    	    stream_lista_numeros.add(lista_numeros116.getTree());
                    	    COLON117=(Token)match(input,COLON,FOLLOW_COLON_in_lista_comandos1237);  
                    	    stream_COLON.add(COLON117);

                    	    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:125:77: ( lista_comandos )?
                    	    int alt19=2;
                    	    int LA19_0 = input.LA(1);

                    	    if ( (LA19_0==IF||(LA19_0>=CASE && LA19_0<=WHILE)||(LA19_0>=WRITEINT && LA19_0<=WRITELN)||LA19_0==LETTER) ) {
                    	        alt19=1;
                    	    }
                    	    switch (alt19) {
                    	        case 1 :
                    	            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:125:77: lista_comandos
                    	            {
                    	            pushFollow(FOLLOW_lista_comandos_in_lista_comandos1239);
                    	            lista_comandos118=lista_comandos();

                    	            state._fsp--;

                    	            stream_lista_comandos.add(lista_comandos118.getTree());

                    	            }
                    	            break;

                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop20;
                        }
                    } while (true);

                    ELSE119=(Token)match(input,ELSE,FOLLOW_ELSE_in_lista_comandos1244);  
                    stream_ELSE.add(ELSE119);

                    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:125:100: ( lista_comandos )?
                    int alt21=2;
                    int LA21_0 = input.LA(1);

                    if ( (LA21_0==IF||(LA21_0>=CASE && LA21_0<=WHILE)||(LA21_0>=WRITEINT && LA21_0<=WRITELN)||LA21_0==LETTER) ) {
                        alt21=1;
                    }
                    switch (alt21) {
                        case 1 :
                            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:125:100: lista_comandos
                            {
                            pushFollow(FOLLOW_lista_comandos_in_lista_comandos1246);
                            lista_comandos120=lista_comandos();

                            state._fsp--;

                            stream_lista_comandos.add(lista_comandos120.getTree());

                            }
                            break;

                    }

                    END121=(Token)match(input,END,FOLLOW_END_in_lista_comandos1249);  
                    stream_END.add(END121);

                    SEMICOLON122=(Token)match(input,SEMICOLON,FOLLOW_SEMICOLON_in_lista_comandos1251);  
                    stream_SEMICOLON.add(SEMICOLON122);



                    // AST REWRITE
                    // elements: id, lista_numeros, lista_comandos, lista_comandos
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 126:4: -> ^( CASE_COMMAND id ( lista_numeros ( lista_comandos )? )+ ( lista_comandos )? )
                    {
                        // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:126:7: ^( CASE_COMMAND id ( lista_numeros ( lista_comandos )? )+ ( lista_comandos )? )
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(CASE_COMMAND, "CASE_COMMAND"), root_1);

                        adaptor.addChild(root_1, stream_id.nextTree());
                        if ( !(stream_lista_numeros.hasNext()) ) {
                            throw new RewriteEarlyExitException();
                        }
                        while ( stream_lista_numeros.hasNext() ) {
                            adaptor.addChild(root_1, stream_lista_numeros.nextTree());
                            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:126:40: ( lista_comandos )?
                            if ( stream_lista_comandos.hasNext() ) {
                                adaptor.addChild(root_1, stream_lista_comandos.nextTree());

                            }
                            stream_lista_comandos.reset();

                        }
                        stream_lista_numeros.reset();
                        // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:126:58: ( lista_comandos )?
                        if ( stream_lista_comandos.hasNext() ) {
                            adaptor.addChild(root_1, stream_lista_comandos.nextTree());

                        }
                        stream_lista_comandos.reset();

                        adaptor.addChild(root_0, root_1);
                        }

                    }

                    retval.tree = root_0;
                    }
                    break;
                case 8 :
                    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:127:6: WRITEINT LEFT_PAREN expressao RIGHT_PAREN SEMICOLON
                    {
                    WRITEINT123=(Token)match(input,WRITEINT,FOLLOW_WRITEINT_in_lista_comandos1280);  
                    stream_WRITEINT.add(WRITEINT123);

                    LEFT_PAREN124=(Token)match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lista_comandos1282);  
                    stream_LEFT_PAREN.add(LEFT_PAREN124);

                    pushFollow(FOLLOW_expressao_in_lista_comandos1284);
                    expressao125=expressao();

                    state._fsp--;

                    stream_expressao.add(expressao125.getTree());
                    RIGHT_PAREN126=(Token)match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lista_comandos1286);  
                    stream_RIGHT_PAREN.add(RIGHT_PAREN126);

                    SEMICOLON127=(Token)match(input,SEMICOLON,FOLLOW_SEMICOLON_in_lista_comandos1288);  
                    stream_SEMICOLON.add(SEMICOLON127);



                    // AST REWRITE
                    // elements: expressao
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 127:58: -> ^( WRITEINT_COMMAND expressao )
                    {
                        // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:127:61: ^( WRITEINT_COMMAND expressao )
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(WRITEINT_COMMAND, "WRITEINT_COMMAND"), root_1);

                        adaptor.addChild(root_1, stream_expressao.nextTree());

                        adaptor.addChild(root_0, root_1);
                        }

                    }

                    retval.tree = root_0;
                    }
                    break;
                case 9 :
                    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:128:6: WRITECHAR LEFT_PAREN expressao RIGHT_PAREN SEMICOLON
                    {
                    WRITECHAR128=(Token)match(input,WRITECHAR,FOLLOW_WRITECHAR_in_lista_comandos1303);  
                    stream_WRITECHAR.add(WRITECHAR128);

                    LEFT_PAREN129=(Token)match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lista_comandos1305);  
                    stream_LEFT_PAREN.add(LEFT_PAREN129);

                    pushFollow(FOLLOW_expressao_in_lista_comandos1307);
                    expressao130=expressao();

                    state._fsp--;

                    stream_expressao.add(expressao130.getTree());
                    RIGHT_PAREN131=(Token)match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lista_comandos1309);  
                    stream_RIGHT_PAREN.add(RIGHT_PAREN131);

                    SEMICOLON132=(Token)match(input,SEMICOLON,FOLLOW_SEMICOLON_in_lista_comandos1311);  
                    stream_SEMICOLON.add(SEMICOLON132);



                    // AST REWRITE
                    // elements: expressao
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 128:59: -> ^( WRITECHAR_COMMAND expressao )
                    {
                        // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:128:62: ^( WRITECHAR_COMMAND expressao )
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(WRITECHAR_COMMAND, "WRITECHAR_COMMAND"), root_1);

                        adaptor.addChild(root_1, stream_expressao.nextTree());

                        adaptor.addChild(root_0, root_1);
                        }

                    }

                    retval.tree = root_0;
                    }
                    break;
                case 10 :
                    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:129:6: WRITEBOOL LEFT_PAREN expressao RIGHT_PAREN SEMICOLON
                    {
                    WRITEBOOL133=(Token)match(input,WRITEBOOL,FOLLOW_WRITEBOOL_in_lista_comandos1326);  
                    stream_WRITEBOOL.add(WRITEBOOL133);

                    LEFT_PAREN134=(Token)match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lista_comandos1328);  
                    stream_LEFT_PAREN.add(LEFT_PAREN134);

                    pushFollow(FOLLOW_expressao_in_lista_comandos1330);
                    expressao135=expressao();

                    state._fsp--;

                    stream_expressao.add(expressao135.getTree());
                    RIGHT_PAREN136=(Token)match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lista_comandos1332);  
                    stream_RIGHT_PAREN.add(RIGHT_PAREN136);

                    SEMICOLON137=(Token)match(input,SEMICOLON,FOLLOW_SEMICOLON_in_lista_comandos1334);  
                    stream_SEMICOLON.add(SEMICOLON137);



                    // AST REWRITE
                    // elements: expressao
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 129:59: -> ^( WRITEBOOL_COMMAND expressao )
                    {
                        // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:129:62: ^( WRITEBOOL_COMMAND expressao )
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(WRITEBOOL_COMMAND, "WRITEBOOL_COMMAND"), root_1);

                        adaptor.addChild(root_1, stream_expressao.nextTree());

                        adaptor.addChild(root_0, root_1);
                        }

                    }

                    retval.tree = root_0;
                    }
                    break;
                case 11 :
                    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:130:6: WRITELN SEMICOLON
                    {
                    WRITELN138=(Token)match(input,WRITELN,FOLLOW_WRITELN_in_lista_comandos1349);  
                    stream_WRITELN.add(WRITELN138);

                    SEMICOLON139=(Token)match(input,SEMICOLON,FOLLOW_SEMICOLON_in_lista_comandos1351);  
                    stream_SEMICOLON.add(SEMICOLON139);



                    // AST REWRITE
                    // elements: 
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 130:24: -> ^( WRITELN_COMMAND )
                    {
                        // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:130:27: ^( WRITELN_COMMAND )
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(WRITELN_COMMAND, "WRITELN_COMMAND"), root_1);

                        adaptor.addChild(root_0, root_1);
                        }

                    }

                    retval.tree = root_0;
                    }
                    break;
                case 12 :
                    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:131:6: WRITESTRING LEFT_PAREN string RIGHT_PAREN SEMICOLON
                    {
                    WRITESTRING140=(Token)match(input,WRITESTRING,FOLLOW_WRITESTRING_in_lista_comandos1364);  
                    stream_WRITESTRING.add(WRITESTRING140);

                    LEFT_PAREN141=(Token)match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lista_comandos1366);  
                    stream_LEFT_PAREN.add(LEFT_PAREN141);

                    pushFollow(FOLLOW_string_in_lista_comandos1368);
                    string142=string();

                    state._fsp--;

                    stream_string.add(string142.getTree());
                    RIGHT_PAREN143=(Token)match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lista_comandos1370);  
                    stream_RIGHT_PAREN.add(RIGHT_PAREN143);

                    SEMICOLON144=(Token)match(input,SEMICOLON,FOLLOW_SEMICOLON_in_lista_comandos1372);  
                    stream_SEMICOLON.add(SEMICOLON144);



                    // AST REWRITE
                    // elements: string
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 131:58: -> ^( WRITESTRING_COMMAND string )
                    {
                        // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:131:61: ^( WRITESTRING_COMMAND string )
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(WRITESTRING_COMMAND, "WRITESTRING_COMMAND"), root_1);

                        adaptor.addChild(root_1, stream_string.nextTree());

                        adaptor.addChild(root_0, root_1);
                        }

                    }

                    retval.tree = root_0;
                    }
                    break;

            }
            retval.stop = input.LT(-1);

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "lista_comandos"

    public static class lista_args_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "lista_args"
    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:134:1: lista_args : expressao ( COMMA expressao )* -> ^( LIST_ARGS ( expressao )+ ) ;
    public final gramaticaMM2Parser.lista_args_return lista_args() throws RecognitionException {
        gramaticaMM2Parser.lista_args_return retval = new gramaticaMM2Parser.lista_args_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token COMMA146=null;
        gramaticaMM2Parser.expressao_return expressao145 = null;

        gramaticaMM2Parser.expressao_return expressao147 = null;


        CommonTree COMMA146_tree=null;
        RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
        RewriteRuleSubtreeStream stream_expressao=new RewriteRuleSubtreeStream(adaptor,"rule expressao");
        try {
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:134:12: ( expressao ( COMMA expressao )* -> ^( LIST_ARGS ( expressao )+ ) )
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:134:14: expressao ( COMMA expressao )*
            {
            pushFollow(FOLLOW_expressao_in_lista_args1391);
            expressao145=expressao();

            state._fsp--;

            stream_expressao.add(expressao145.getTree());
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:134:23: ( COMMA expressao )*
            loop23:
            do {
                int alt23=2;
                int LA23_0 = input.LA(1);

                if ( (LA23_0==COMMA) ) {
                    alt23=1;
                }


                switch (alt23) {
            	case 1 :
            	    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:134:24: COMMA expressao
            	    {
            	    COMMA146=(Token)match(input,COMMA,FOLLOW_COMMA_in_lista_args1393);  
            	    stream_COMMA.add(COMMA146);

            	    pushFollow(FOLLOW_expressao_in_lista_args1395);
            	    expressao147=expressao();

            	    state._fsp--;

            	    stream_expressao.add(expressao147.getTree());

            	    }
            	    break;

            	default :
            	    break loop23;
                }
            } while (true);



            // AST REWRITE
            // elements: expressao
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

            root_0 = (CommonTree)adaptor.nil();
            // 134:42: -> ^( LIST_ARGS ( expressao )+ )
            {
                // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:134:45: ^( LIST_ARGS ( expressao )+ )
                {
                CommonTree root_1 = (CommonTree)adaptor.nil();
                root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(LIST_ARGS, "LIST_ARGS"), root_1);

                if ( !(stream_expressao.hasNext()) ) {
                    throw new RewriteEarlyExitException();
                }
                while ( stream_expressao.hasNext() ) {
                    adaptor.addChild(root_1, stream_expressao.nextTree());

                }
                stream_expressao.reset();

                adaptor.addChild(root_0, root_1);
                }

            }

            retval.tree = root_0;
            }

            retval.stop = input.LT(-1);

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "lista_args"

    public static class lista_numeros_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "lista_numeros"
    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:136:1: lista_numeros : ( inteiro DOT DOT inteiro -> ^( LIST_NUMBER_RANGE inteiro inteiro ) | inteiro ( COMMA inteiro )* -> ^( LIST_NUMBER ( inteiro )+ ) );
    public final gramaticaMM2Parser.lista_numeros_return lista_numeros() throws RecognitionException {
        gramaticaMM2Parser.lista_numeros_return retval = new gramaticaMM2Parser.lista_numeros_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token DOT149=null;
        Token DOT150=null;
        Token COMMA153=null;
        gramaticaMM2Parser.inteiro_return inteiro148 = null;

        gramaticaMM2Parser.inteiro_return inteiro151 = null;

        gramaticaMM2Parser.inteiro_return inteiro152 = null;

        gramaticaMM2Parser.inteiro_return inteiro154 = null;


        CommonTree DOT149_tree=null;
        CommonTree DOT150_tree=null;
        CommonTree COMMA153_tree=null;
        RewriteRuleTokenStream stream_DOT=new RewriteRuleTokenStream(adaptor,"token DOT");
        RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
        RewriteRuleSubtreeStream stream_inteiro=new RewriteRuleSubtreeStream(adaptor,"rule inteiro");
        try {
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:136:15: ( inteiro DOT DOT inteiro -> ^( LIST_NUMBER_RANGE inteiro inteiro ) | inteiro ( COMMA inteiro )* -> ^( LIST_NUMBER ( inteiro )+ ) )
            int alt25=2;
            alt25 = dfa25.predict(input);
            switch (alt25) {
                case 1 :
                    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:136:17: inteiro DOT DOT inteiro
                    {
                    pushFollow(FOLLOW_inteiro_in_lista_numeros1416);
                    inteiro148=inteiro();

                    state._fsp--;

                    stream_inteiro.add(inteiro148.getTree());
                    DOT149=(Token)match(input,DOT,FOLLOW_DOT_in_lista_numeros1418);  
                    stream_DOT.add(DOT149);

                    DOT150=(Token)match(input,DOT,FOLLOW_DOT_in_lista_numeros1420);  
                    stream_DOT.add(DOT150);

                    pushFollow(FOLLOW_inteiro_in_lista_numeros1422);
                    inteiro151=inteiro();

                    state._fsp--;

                    stream_inteiro.add(inteiro151.getTree());


                    // AST REWRITE
                    // elements: inteiro, inteiro
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 136:41: -> ^( LIST_NUMBER_RANGE inteiro inteiro )
                    {
                        // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:136:44: ^( LIST_NUMBER_RANGE inteiro inteiro )
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(LIST_NUMBER_RANGE, "LIST_NUMBER_RANGE"), root_1);

                        adaptor.addChild(root_1, stream_inteiro.nextTree());
                        adaptor.addChild(root_1, stream_inteiro.nextTree());

                        adaptor.addChild(root_0, root_1);
                        }

                    }

                    retval.tree = root_0;
                    }
                    break;
                case 2 :
                    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:137:5: inteiro ( COMMA inteiro )*
                    {
                    pushFollow(FOLLOW_inteiro_in_lista_numeros1438);
                    inteiro152=inteiro();

                    state._fsp--;

                    stream_inteiro.add(inteiro152.getTree());
                    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:137:13: ( COMMA inteiro )*
                    loop24:
                    do {
                        int alt24=2;
                        int LA24_0 = input.LA(1);

                        if ( (LA24_0==COMMA) ) {
                            alt24=1;
                        }


                        switch (alt24) {
                    	case 1 :
                    	    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:137:14: COMMA inteiro
                    	    {
                    	    COMMA153=(Token)match(input,COMMA,FOLLOW_COMMA_in_lista_numeros1441);  
                    	    stream_COMMA.add(COMMA153);

                    	    pushFollow(FOLLOW_inteiro_in_lista_numeros1443);
                    	    inteiro154=inteiro();

                    	    state._fsp--;

                    	    stream_inteiro.add(inteiro154.getTree());

                    	    }
                    	    break;

                    	default :
                    	    break loop24;
                        }
                    } while (true);



                    // AST REWRITE
                    // elements: inteiro
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 137:30: -> ^( LIST_NUMBER ( inteiro )+ )
                    {
                        // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:137:33: ^( LIST_NUMBER ( inteiro )+ )
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(LIST_NUMBER, "LIST_NUMBER"), root_1);

                        if ( !(stream_inteiro.hasNext()) ) {
                            throw new RewriteEarlyExitException();
                        }
                        while ( stream_inteiro.hasNext() ) {
                            adaptor.addChild(root_1, stream_inteiro.nextTree());

                        }
                        stream_inteiro.reset();

                        adaptor.addChild(root_0, root_1);
                        }

                    }

                    retval.tree = root_0;
                    }
                    break;

            }
            retval.stop = input.LT(-1);

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "lista_numeros"

    public static class expressao_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "expressao"
    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:139:1: expressao : clausula ( OR clausula )* -> ^( EXPRESSION ( clausula )+ ) ;
    public final gramaticaMM2Parser.expressao_return expressao() throws RecognitionException {
        gramaticaMM2Parser.expressao_return retval = new gramaticaMM2Parser.expressao_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token OR156=null;
        gramaticaMM2Parser.clausula_return clausula155 = null;

        gramaticaMM2Parser.clausula_return clausula157 = null;


        CommonTree OR156_tree=null;
        RewriteRuleTokenStream stream_OR=new RewriteRuleTokenStream(adaptor,"token OR");
        RewriteRuleSubtreeStream stream_clausula=new RewriteRuleSubtreeStream(adaptor,"rule clausula");
        try {
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:139:12: ( clausula ( OR clausula )* -> ^( EXPRESSION ( clausula )+ ) )
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:139:15: clausula ( OR clausula )*
            {
            pushFollow(FOLLOW_clausula_in_expressao1464);
            clausula155=clausula();

            state._fsp--;

            stream_clausula.add(clausula155.getTree());
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:139:24: ( OR clausula )*
            loop26:
            do {
                int alt26=2;
                int LA26_0 = input.LA(1);

                if ( (LA26_0==OR) ) {
                    alt26=1;
                }


                switch (alt26) {
            	case 1 :
            	    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:139:25: OR clausula
            	    {
            	    OR156=(Token)match(input,OR,FOLLOW_OR_in_expressao1467);  
            	    stream_OR.add(OR156);

            	    pushFollow(FOLLOW_clausula_in_expressao1469);
            	    clausula157=clausula();

            	    state._fsp--;

            	    stream_clausula.add(clausula157.getTree());

            	    }
            	    break;

            	default :
            	    break loop26;
                }
            } while (true);



            // AST REWRITE
            // elements: clausula
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

            root_0 = (CommonTree)adaptor.nil();
            // 139:39: -> ^( EXPRESSION ( clausula )+ )
            {
                // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:139:42: ^( EXPRESSION ( clausula )+ )
                {
                CommonTree root_1 = (CommonTree)adaptor.nil();
                root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(EXPRESSION, "EXPRESSION"), root_1);

                if ( !(stream_clausula.hasNext()) ) {
                    throw new RewriteEarlyExitException();
                }
                while ( stream_clausula.hasNext() ) {
                    adaptor.addChild(root_1, stream_clausula.nextTree());

                }
                stream_clausula.reset();

                adaptor.addChild(root_0, root_1);
                }

            }

            retval.tree = root_0;
            }

            retval.stop = input.LT(-1);

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "expressao"

    public static class clausula_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "clausula"
    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:141:1: clausula : literal ( AND literal )* -> ^( CLAUSE ( literal )+ ) ;
    public final gramaticaMM2Parser.clausula_return clausula() throws RecognitionException {
        gramaticaMM2Parser.clausula_return retval = new gramaticaMM2Parser.clausula_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token AND159=null;
        gramaticaMM2Parser.literal_return literal158 = null;

        gramaticaMM2Parser.literal_return literal160 = null;


        CommonTree AND159_tree=null;
        RewriteRuleTokenStream stream_AND=new RewriteRuleTokenStream(adaptor,"token AND");
        RewriteRuleSubtreeStream stream_literal=new RewriteRuleSubtreeStream(adaptor,"rule literal");
        try {
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:141:17: ( literal ( AND literal )* -> ^( CLAUSE ( literal )+ ) )
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:141:19: literal ( AND literal )*
            {
            pushFollow(FOLLOW_literal_in_clausula1495);
            literal158=literal();

            state._fsp--;

            stream_literal.add(literal158.getTree());
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:141:27: ( AND literal )*
            loop27:
            do {
                int alt27=2;
                int LA27_0 = input.LA(1);

                if ( (LA27_0==AND) ) {
                    alt27=1;
                }


                switch (alt27) {
            	case 1 :
            	    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:141:28: AND literal
            	    {
            	    AND159=(Token)match(input,AND,FOLLOW_AND_in_clausula1498);  
            	    stream_AND.add(AND159);

            	    pushFollow(FOLLOW_literal_in_clausula1500);
            	    literal160=literal();

            	    state._fsp--;

            	    stream_literal.add(literal160.getTree());

            	    }
            	    break;

            	default :
            	    break loop27;
                }
            } while (true);



            // AST REWRITE
            // elements: literal
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

            root_0 = (CommonTree)adaptor.nil();
            // 141:42: -> ^( CLAUSE ( literal )+ )
            {
                // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:141:45: ^( CLAUSE ( literal )+ )
                {
                CommonTree root_1 = (CommonTree)adaptor.nil();
                root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(CLAUSE, "CLAUSE"), root_1);

                if ( !(stream_literal.hasNext()) ) {
                    throw new RewriteEarlyExitException();
                }
                while ( stream_literal.hasNext() ) {
                    adaptor.addChild(root_1, stream_literal.nextTree());

                }
                stream_literal.reset();

                adaptor.addChild(root_0, root_1);
                }

            }

            retval.tree = root_0;
            }

            retval.stop = input.LT(-1);

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "clausula"

    public static class literal_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "literal"
    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:143:1: literal : igual_diferente ( ( GREATER_EQUAL | LOWER_EQUAL | LOWER | GREATER ) igual_diferente )* -> ^( LITERAL ( igual_diferente )+ ) ;
    public final gramaticaMM2Parser.literal_return literal() throws RecognitionException {
        gramaticaMM2Parser.literal_return retval = new gramaticaMM2Parser.literal_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token GREATER_EQUAL162=null;
        Token LOWER_EQUAL163=null;
        Token LOWER164=null;
        Token GREATER165=null;
        gramaticaMM2Parser.igual_diferente_return igual_diferente161 = null;

        gramaticaMM2Parser.igual_diferente_return igual_diferente166 = null;


        CommonTree GREATER_EQUAL162_tree=null;
        CommonTree LOWER_EQUAL163_tree=null;
        CommonTree LOWER164_tree=null;
        CommonTree GREATER165_tree=null;
        RewriteRuleTokenStream stream_GREATER=new RewriteRuleTokenStream(adaptor,"token GREATER");
        RewriteRuleTokenStream stream_LOWER=new RewriteRuleTokenStream(adaptor,"token LOWER");
        RewriteRuleTokenStream stream_GREATER_EQUAL=new RewriteRuleTokenStream(adaptor,"token GREATER_EQUAL");
        RewriteRuleTokenStream stream_LOWER_EQUAL=new RewriteRuleTokenStream(adaptor,"token LOWER_EQUAL");
        RewriteRuleSubtreeStream stream_igual_diferente=new RewriteRuleSubtreeStream(adaptor,"rule igual_diferente");
        try {
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:143:12: ( igual_diferente ( ( GREATER_EQUAL | LOWER_EQUAL | LOWER | GREATER ) igual_diferente )* -> ^( LITERAL ( igual_diferente )+ ) )
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:143:24: igual_diferente ( ( GREATER_EQUAL | LOWER_EQUAL | LOWER | GREATER ) igual_diferente )*
            {
            pushFollow(FOLLOW_igual_diferente_in_literal1536);
            igual_diferente161=igual_diferente();

            state._fsp--;

            stream_igual_diferente.add(igual_diferente161.getTree());
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:143:40: ( ( GREATER_EQUAL | LOWER_EQUAL | LOWER | GREATER ) igual_diferente )*
            loop29:
            do {
                int alt29=2;
                int LA29_0 = input.LA(1);

                if ( ((LA29_0>=GREATER && LA29_0<=LOWER_EQUAL)) ) {
                    alt29=1;
                }


                switch (alt29) {
            	case 1 :
            	    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:143:41: ( GREATER_EQUAL | LOWER_EQUAL | LOWER | GREATER ) igual_diferente
            	    {
            	    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:143:41: ( GREATER_EQUAL | LOWER_EQUAL | LOWER | GREATER )
            	    int alt28=4;
            	    switch ( input.LA(1) ) {
            	    case GREATER_EQUAL:
            	        {
            	        alt28=1;
            	        }
            	        break;
            	    case LOWER_EQUAL:
            	        {
            	        alt28=2;
            	        }
            	        break;
            	    case LOWER:
            	        {
            	        alt28=3;
            	        }
            	        break;
            	    case GREATER:
            	        {
            	        alt28=4;
            	        }
            	        break;
            	    default:
            	        NoViableAltException nvae =
            	            new NoViableAltException("", 28, 0, input);

            	        throw nvae;
            	    }

            	    switch (alt28) {
            	        case 1 :
            	            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:143:42: GREATER_EQUAL
            	            {
            	            GREATER_EQUAL162=(Token)match(input,GREATER_EQUAL,FOLLOW_GREATER_EQUAL_in_literal1540);  
            	            stream_GREATER_EQUAL.add(GREATER_EQUAL162);


            	            }
            	            break;
            	        case 2 :
            	            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:143:56: LOWER_EQUAL
            	            {
            	            LOWER_EQUAL163=(Token)match(input,LOWER_EQUAL,FOLLOW_LOWER_EQUAL_in_literal1542);  
            	            stream_LOWER_EQUAL.add(LOWER_EQUAL163);


            	            }
            	            break;
            	        case 3 :
            	            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:143:68: LOWER
            	            {
            	            LOWER164=(Token)match(input,LOWER,FOLLOW_LOWER_in_literal1544);  
            	            stream_LOWER.add(LOWER164);


            	            }
            	            break;
            	        case 4 :
            	            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:143:74: GREATER
            	            {
            	            GREATER165=(Token)match(input,GREATER,FOLLOW_GREATER_in_literal1546);  
            	            stream_GREATER.add(GREATER165);


            	            }
            	            break;

            	    }

            	    pushFollow(FOLLOW_igual_diferente_in_literal1549);
            	    igual_diferente166=igual_diferente();

            	    state._fsp--;

            	    stream_igual_diferente.add(igual_diferente166.getTree());

            	    }
            	    break;

            	default :
            	    break loop29;
                }
            } while (true);



            // AST REWRITE
            // elements: igual_diferente
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

            root_0 = (CommonTree)adaptor.nil();
            // 144:2: -> ^( LITERAL ( igual_diferente )+ )
            {
                // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:144:8: ^( LITERAL ( igual_diferente )+ )
                {
                CommonTree root_1 = (CommonTree)adaptor.nil();
                root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(LITERAL, "LITERAL"), root_1);

                if ( !(stream_igual_diferente.hasNext()) ) {
                    throw new RewriteEarlyExitException();
                }
                while ( stream_igual_diferente.hasNext() ) {
                    adaptor.addChild(root_1, stream_igual_diferente.nextTree());

                }
                stream_igual_diferente.reset();

                adaptor.addChild(root_0, root_1);
                }

            }

            retval.tree = root_0;
            }

            retval.stop = input.LT(-1);

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "literal"

    public static class igual_diferente_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "igual_diferente"
    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:146:1: igual_diferente : exp_aritmetica ( ( EQUAL | NEQUAL ) exp_aritmetica )* -> ^( EQUAL_NEQUAL ( exp_aritmetica )+ ) ;
    public final gramaticaMM2Parser.igual_diferente_return igual_diferente() throws RecognitionException {
        gramaticaMM2Parser.igual_diferente_return retval = new gramaticaMM2Parser.igual_diferente_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token EQUAL168=null;
        Token NEQUAL169=null;
        gramaticaMM2Parser.exp_aritmetica_return exp_aritmetica167 = null;

        gramaticaMM2Parser.exp_aritmetica_return exp_aritmetica170 = null;


        CommonTree EQUAL168_tree=null;
        CommonTree NEQUAL169_tree=null;
        RewriteRuleTokenStream stream_NEQUAL=new RewriteRuleTokenStream(adaptor,"token NEQUAL");
        RewriteRuleTokenStream stream_EQUAL=new RewriteRuleTokenStream(adaptor,"token EQUAL");
        RewriteRuleSubtreeStream stream_exp_aritmetica=new RewriteRuleSubtreeStream(adaptor,"rule exp_aritmetica");
        try {
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:146:19: ( exp_aritmetica ( ( EQUAL | NEQUAL ) exp_aritmetica )* -> ^( EQUAL_NEQUAL ( exp_aritmetica )+ ) )
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:146:23: exp_aritmetica ( ( EQUAL | NEQUAL ) exp_aritmetica )*
            {
            pushFollow(FOLLOW_exp_aritmetica_in_igual_diferente1580);
            exp_aritmetica167=exp_aritmetica();

            state._fsp--;

            stream_exp_aritmetica.add(exp_aritmetica167.getTree());
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:146:38: ( ( EQUAL | NEQUAL ) exp_aritmetica )*
            loop31:
            do {
                int alt31=2;
                int LA31_0 = input.LA(1);

                if ( ((LA31_0>=EQUAL && LA31_0<=NEQUAL)) ) {
                    alt31=1;
                }


                switch (alt31) {
            	case 1 :
            	    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:146:39: ( EQUAL | NEQUAL ) exp_aritmetica
            	    {
            	    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:146:39: ( EQUAL | NEQUAL )
            	    int alt30=2;
            	    int LA30_0 = input.LA(1);

            	    if ( (LA30_0==EQUAL) ) {
            	        alt30=1;
            	    }
            	    else if ( (LA30_0==NEQUAL) ) {
            	        alt30=2;
            	    }
            	    else {
            	        NoViableAltException nvae =
            	            new NoViableAltException("", 30, 0, input);

            	        throw nvae;
            	    }
            	    switch (alt30) {
            	        case 1 :
            	            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:146:40: EQUAL
            	            {
            	            EQUAL168=(Token)match(input,EQUAL,FOLLOW_EQUAL_in_igual_diferente1584);  
            	            stream_EQUAL.add(EQUAL168);


            	            }
            	            break;
            	        case 2 :
            	            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:146:46: NEQUAL
            	            {
            	            NEQUAL169=(Token)match(input,NEQUAL,FOLLOW_NEQUAL_in_igual_diferente1586);  
            	            stream_NEQUAL.add(NEQUAL169);


            	            }
            	            break;

            	    }

            	    pushFollow(FOLLOW_exp_aritmetica_in_igual_diferente1589);
            	    exp_aritmetica170=exp_aritmetica();

            	    state._fsp--;

            	    stream_exp_aritmetica.add(exp_aritmetica170.getTree());

            	    }
            	    break;

            	default :
            	    break loop31;
                }
            } while (true);



            // AST REWRITE
            // elements: exp_aritmetica
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

            root_0 = (CommonTree)adaptor.nil();
            // 147:2: -> ^( EQUAL_NEQUAL ( exp_aritmetica )+ )
            {
                // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:147:8: ^( EQUAL_NEQUAL ( exp_aritmetica )+ )
                {
                CommonTree root_1 = (CommonTree)adaptor.nil();
                root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(EQUAL_NEQUAL, "EQUAL_NEQUAL"), root_1);

                if ( !(stream_exp_aritmetica.hasNext()) ) {
                    throw new RewriteEarlyExitException();
                }
                while ( stream_exp_aritmetica.hasNext() ) {
                    adaptor.addChild(root_1, stream_exp_aritmetica.nextTree());

                }
                stream_exp_aritmetica.reset();

                adaptor.addChild(root_0, root_1);
                }

            }

            retval.tree = root_0;
            }

            retval.stop = input.LT(-1);

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "igual_diferente"

    public static class exp_aritmetica_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "exp_aritmetica"
    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:149:1: exp_aritmetica : termo ( ( MINUS | PLUS ) termo )* -> ^( ARITMETIC_EXPRESSION ( termo )+ ) ;
    public final gramaticaMM2Parser.exp_aritmetica_return exp_aritmetica() throws RecognitionException {
        gramaticaMM2Parser.exp_aritmetica_return retval = new gramaticaMM2Parser.exp_aritmetica_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token MINUS172=null;
        Token PLUS173=null;
        gramaticaMM2Parser.termo_return termo171 = null;

        gramaticaMM2Parser.termo_return termo174 = null;


        CommonTree MINUS172_tree=null;
        CommonTree PLUS173_tree=null;
        RewriteRuleTokenStream stream_PLUS=new RewriteRuleTokenStream(adaptor,"token PLUS");
        RewriteRuleTokenStream stream_MINUS=new RewriteRuleTokenStream(adaptor,"token MINUS");
        RewriteRuleSubtreeStream stream_termo=new RewriteRuleSubtreeStream(adaptor,"rule termo");
        try {
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:149:17: ( termo ( ( MINUS | PLUS ) termo )* -> ^( ARITMETIC_EXPRESSION ( termo )+ ) )
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:149:19: termo ( ( MINUS | PLUS ) termo )*
            {
            pushFollow(FOLLOW_termo_in_exp_aritmetica1622);
            termo171=termo();

            state._fsp--;

            stream_termo.add(termo171.getTree());
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:149:25: ( ( MINUS | PLUS ) termo )*
            loop33:
            do {
                int alt33=2;
                int LA33_0 = input.LA(1);

                if ( ((LA33_0>=MINUS && LA33_0<=PLUS)) ) {
                    alt33=1;
                }


                switch (alt33) {
            	case 1 :
            	    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:149:26: ( MINUS | PLUS ) termo
            	    {
            	    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:149:26: ( MINUS | PLUS )
            	    int alt32=2;
            	    int LA32_0 = input.LA(1);

            	    if ( (LA32_0==MINUS) ) {
            	        alt32=1;
            	    }
            	    else if ( (LA32_0==PLUS) ) {
            	        alt32=2;
            	    }
            	    else {
            	        NoViableAltException nvae =
            	            new NoViableAltException("", 32, 0, input);

            	        throw nvae;
            	    }
            	    switch (alt32) {
            	        case 1 :
            	            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:149:27: MINUS
            	            {
            	            MINUS172=(Token)match(input,MINUS,FOLLOW_MINUS_in_exp_aritmetica1626);  
            	            stream_MINUS.add(MINUS172);


            	            }
            	            break;
            	        case 2 :
            	            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:149:33: PLUS
            	            {
            	            PLUS173=(Token)match(input,PLUS,FOLLOW_PLUS_in_exp_aritmetica1628);  
            	            stream_PLUS.add(PLUS173);


            	            }
            	            break;

            	    }

            	    pushFollow(FOLLOW_termo_in_exp_aritmetica1631);
            	    termo174=termo();

            	    state._fsp--;

            	    stream_termo.add(termo174.getTree());

            	    }
            	    break;

            	default :
            	    break loop33;
                }
            } while (true);



            // AST REWRITE
            // elements: termo
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

            root_0 = (CommonTree)adaptor.nil();
            // 149:47: -> ^( ARITMETIC_EXPRESSION ( termo )+ )
            {
                // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:149:50: ^( ARITMETIC_EXPRESSION ( termo )+ )
                {
                CommonTree root_1 = (CommonTree)adaptor.nil();
                root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(ARITMETIC_EXPRESSION, "ARITMETIC_EXPRESSION"), root_1);

                if ( !(stream_termo.hasNext()) ) {
                    throw new RewriteEarlyExitException();
                }
                while ( stream_termo.hasNext() ) {
                    adaptor.addChild(root_1, stream_termo.nextTree());

                }
                stream_termo.reset();

                adaptor.addChild(root_0, root_1);
                }

            }

            retval.tree = root_0;
            }

            retval.stop = input.LT(-1);

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "exp_aritmetica"

    public static class termo_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "termo"
    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:151:1: termo : exp_negacao ( ( MULT | DIV | MOD ) exp_negacao )* -> ^( TERM_EXPRESSION ( exp_negacao )+ ) ;
    public final gramaticaMM2Parser.termo_return termo() throws RecognitionException {
        gramaticaMM2Parser.termo_return retval = new gramaticaMM2Parser.termo_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token MULT176=null;
        Token DIV177=null;
        Token MOD178=null;
        gramaticaMM2Parser.exp_negacao_return exp_negacao175 = null;

        gramaticaMM2Parser.exp_negacao_return exp_negacao179 = null;


        CommonTree MULT176_tree=null;
        CommonTree DIV177_tree=null;
        CommonTree MOD178_tree=null;
        RewriteRuleTokenStream stream_MULT=new RewriteRuleTokenStream(adaptor,"token MULT");
        RewriteRuleTokenStream stream_DIV=new RewriteRuleTokenStream(adaptor,"token DIV");
        RewriteRuleTokenStream stream_MOD=new RewriteRuleTokenStream(adaptor,"token MOD");
        RewriteRuleSubtreeStream stream_exp_negacao=new RewriteRuleSubtreeStream(adaptor,"rule exp_negacao");
        try {
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:151:8: ( exp_negacao ( ( MULT | DIV | MOD ) exp_negacao )* -> ^( TERM_EXPRESSION ( exp_negacao )+ ) )
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:151:14: exp_negacao ( ( MULT | DIV | MOD ) exp_negacao )*
            {
            pushFollow(FOLLOW_exp_negacao_in_termo1659);
            exp_negacao175=exp_negacao();

            state._fsp--;

            stream_exp_negacao.add(exp_negacao175.getTree());
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:151:26: ( ( MULT | DIV | MOD ) exp_negacao )*
            loop35:
            do {
                int alt35=2;
                int LA35_0 = input.LA(1);

                if ( ((LA35_0>=MULT && LA35_0<=MOD)) ) {
                    alt35=1;
                }


                switch (alt35) {
            	case 1 :
            	    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:151:27: ( MULT | DIV | MOD ) exp_negacao
            	    {
            	    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:151:27: ( MULT | DIV | MOD )
            	    int alt34=3;
            	    switch ( input.LA(1) ) {
            	    case MULT:
            	        {
            	        alt34=1;
            	        }
            	        break;
            	    case DIV:
            	        {
            	        alt34=2;
            	        }
            	        break;
            	    case MOD:
            	        {
            	        alt34=3;
            	        }
            	        break;
            	    default:
            	        NoViableAltException nvae =
            	            new NoViableAltException("", 34, 0, input);

            	        throw nvae;
            	    }

            	    switch (alt34) {
            	        case 1 :
            	            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:151:28: MULT
            	            {
            	            MULT176=(Token)match(input,MULT,FOLLOW_MULT_in_termo1663);  
            	            stream_MULT.add(MULT176);


            	            }
            	            break;
            	        case 2 :
            	            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:151:33: DIV
            	            {
            	            DIV177=(Token)match(input,DIV,FOLLOW_DIV_in_termo1665);  
            	            stream_DIV.add(DIV177);


            	            }
            	            break;
            	        case 3 :
            	            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:151:37: MOD
            	            {
            	            MOD178=(Token)match(input,MOD,FOLLOW_MOD_in_termo1667);  
            	            stream_MOD.add(MOD178);


            	            }
            	            break;

            	    }

            	    pushFollow(FOLLOW_exp_negacao_in_termo1670);
            	    exp_negacao179=exp_negacao();

            	    state._fsp--;

            	    stream_exp_negacao.add(exp_negacao179.getTree());

            	    }
            	    break;

            	default :
            	    break loop35;
                }
            } while (true);



            // AST REWRITE
            // elements: exp_negacao
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

            root_0 = (CommonTree)adaptor.nil();
            // 151:56: -> ^( TERM_EXPRESSION ( exp_negacao )+ )
            {
                // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:151:59: ^( TERM_EXPRESSION ( exp_negacao )+ )
                {
                CommonTree root_1 = (CommonTree)adaptor.nil();
                root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(TERM_EXPRESSION, "TERM_EXPRESSION"), root_1);

                if ( !(stream_exp_negacao.hasNext()) ) {
                    throw new RewriteEarlyExitException();
                }
                while ( stream_exp_negacao.hasNext() ) {
                    adaptor.addChild(root_1, stream_exp_negacao.nextTree());

                }
                stream_exp_negacao.reset();

                adaptor.addChild(root_0, root_1);
                }

            }

            retval.tree = root_0;
            }

            retval.stop = input.LT(-1);

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "termo"

    public static class exp_negacao_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "exp_negacao"
    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:154:1: exp_negacao : ( NOT exp_atomica -> ^( NOT_EXPRESSION exp_atomica ) | MINUS exp_atomica -> ^( MINUS_EXPRESSION exp_atomica ) | exp_atomica );
    public final gramaticaMM2Parser.exp_negacao_return exp_negacao() throws RecognitionException {
        gramaticaMM2Parser.exp_negacao_return retval = new gramaticaMM2Parser.exp_negacao_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token NOT180=null;
        Token MINUS182=null;
        gramaticaMM2Parser.exp_atomica_return exp_atomica181 = null;

        gramaticaMM2Parser.exp_atomica_return exp_atomica183 = null;

        gramaticaMM2Parser.exp_atomica_return exp_atomica184 = null;


        CommonTree NOT180_tree=null;
        CommonTree MINUS182_tree=null;
        RewriteRuleTokenStream stream_NOT=new RewriteRuleTokenStream(adaptor,"token NOT");
        RewriteRuleTokenStream stream_MINUS=new RewriteRuleTokenStream(adaptor,"token MINUS");
        RewriteRuleSubtreeStream stream_exp_atomica=new RewriteRuleSubtreeStream(adaptor,"rule exp_atomica");
        try {
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:154:14: ( NOT exp_atomica -> ^( NOT_EXPRESSION exp_atomica ) | MINUS exp_atomica -> ^( MINUS_EXPRESSION exp_atomica ) | exp_atomica )
            int alt36=3;
            switch ( input.LA(1) ) {
            case NOT:
                {
                alt36=1;
                }
                break;
            case MINUS:
                {
                alt36=2;
                }
                break;
            case LEFT_PAREN:
            case DIGIT_NULL:
            case ASPA:
            case BOOL:
            case DIGIT:
            case LETTER:
                {
                alt36=3;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 36, 0, input);

                throw nvae;
            }

            switch (alt36) {
                case 1 :
                    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:154:18: NOT exp_atomica
                    {
                    NOT180=(Token)match(input,NOT,FOLLOW_NOT_in_exp_negacao1700);  
                    stream_NOT.add(NOT180);

                    pushFollow(FOLLOW_exp_atomica_in_exp_negacao1702);
                    exp_atomica181=exp_atomica();

                    state._fsp--;

                    stream_exp_atomica.add(exp_atomica181.getTree());


                    // AST REWRITE
                    // elements: exp_atomica
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 154:34: -> ^( NOT_EXPRESSION exp_atomica )
                    {
                        // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:154:37: ^( NOT_EXPRESSION exp_atomica )
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(NOT_EXPRESSION, "NOT_EXPRESSION"), root_1);

                        adaptor.addChild(root_1, stream_exp_atomica.nextTree());

                        adaptor.addChild(root_0, root_1);
                        }

                    }

                    retval.tree = root_0;
                    }
                    break;
                case 2 :
                    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:155:17: MINUS exp_atomica
                    {
                    MINUS182=(Token)match(input,MINUS,FOLLOW_MINUS_in_exp_negacao1728);  
                    stream_MINUS.add(MINUS182);

                    pushFollow(FOLLOW_exp_atomica_in_exp_negacao1730);
                    exp_atomica183=exp_atomica();

                    state._fsp--;

                    stream_exp_atomica.add(exp_atomica183.getTree());


                    // AST REWRITE
                    // elements: exp_atomica
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 155:35: -> ^( MINUS_EXPRESSION exp_atomica )
                    {
                        // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:155:38: ^( MINUS_EXPRESSION exp_atomica )
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(MINUS_EXPRESSION, "MINUS_EXPRESSION"), root_1);

                        adaptor.addChild(root_1, stream_exp_atomica.nextTree());

                        adaptor.addChild(root_0, root_1);
                        }

                    }

                    retval.tree = root_0;
                    }
                    break;
                case 3 :
                    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:156:22: exp_atomica
                    {
                    root_0 = (CommonTree)adaptor.nil();

                    pushFollow(FOLLOW_exp_atomica_in_exp_negacao1761);
                    exp_atomica184=exp_atomica();

                    state._fsp--;

                    adaptor.addChild(root_0, exp_atomica184.getTree());

                    }
                    break;

            }
            retval.stop = input.LT(-1);

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "exp_negacao"

    public static class exp_atomica_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "exp_atomica"
    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:158:1: exp_atomica : ( LEFT_PAREN expressao RIGHT_PAREN -> ^( PEREN_EXP expressao ) | inteiro | caracter | BOOL | id | procedure_chamada -> ^( FUNC_CALL_EXPRESSION procedure_chamada ) | id_array );
    public final gramaticaMM2Parser.exp_atomica_return exp_atomica() throws RecognitionException {
        gramaticaMM2Parser.exp_atomica_return retval = new gramaticaMM2Parser.exp_atomica_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token LEFT_PAREN185=null;
        Token RIGHT_PAREN187=null;
        Token BOOL190=null;
        gramaticaMM2Parser.expressao_return expressao186 = null;

        gramaticaMM2Parser.inteiro_return inteiro188 = null;

        gramaticaMM2Parser.caracter_return caracter189 = null;

        gramaticaMM2Parser.id_return id191 = null;

        gramaticaMM2Parser.procedure_chamada_return procedure_chamada192 = null;

        gramaticaMM2Parser.id_array_return id_array193 = null;


        CommonTree LEFT_PAREN185_tree=null;
        CommonTree RIGHT_PAREN187_tree=null;
        CommonTree BOOL190_tree=null;
        RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
        RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
        RewriteRuleSubtreeStream stream_procedure_chamada=new RewriteRuleSubtreeStream(adaptor,"rule procedure_chamada");
        RewriteRuleSubtreeStream stream_expressao=new RewriteRuleSubtreeStream(adaptor,"rule expressao");
        try {
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:158:15: ( LEFT_PAREN expressao RIGHT_PAREN -> ^( PEREN_EXP expressao ) | inteiro | caracter | BOOL | id | procedure_chamada -> ^( FUNC_CALL_EXPRESSION procedure_chamada ) | id_array )
            int alt37=7;
            alt37 = dfa37.predict(input);
            switch (alt37) {
                case 1 :
                    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:158:17: LEFT_PAREN expressao RIGHT_PAREN
                    {
                    LEFT_PAREN185=(Token)match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_exp_atomica1772);  
                    stream_LEFT_PAREN.add(LEFT_PAREN185);

                    pushFollow(FOLLOW_expressao_in_exp_atomica1774);
                    expressao186=expressao();

                    state._fsp--;

                    stream_expressao.add(expressao186.getTree());
                    RIGHT_PAREN187=(Token)match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_exp_atomica1776);  
                    stream_RIGHT_PAREN.add(RIGHT_PAREN187);



                    // AST REWRITE
                    // elements: expressao
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 158:50: -> ^( PEREN_EXP expressao )
                    {
                        // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:158:52: ^( PEREN_EXP expressao )
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(PEREN_EXP, "PEREN_EXP"), root_1);

                        adaptor.addChild(root_1, stream_expressao.nextTree());

                        adaptor.addChild(root_0, root_1);
                        }

                    }

                    retval.tree = root_0;
                    }
                    break;
                case 2 :
                    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:159:14: inteiro
                    {
                    root_0 = (CommonTree)adaptor.nil();

                    pushFollow(FOLLOW_inteiro_in_exp_atomica1798);
                    inteiro188=inteiro();

                    state._fsp--;

                    adaptor.addChild(root_0, inteiro188.getTree());

                    }
                    break;
                case 3 :
                    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:160:11: caracter
                    {
                    root_0 = (CommonTree)adaptor.nil();

                    pushFollow(FOLLOW_caracter_in_exp_atomica1811);
                    caracter189=caracter();

                    state._fsp--;

                    adaptor.addChild(root_0, caracter189.getTree());

                    }
                    break;
                case 4 :
                    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:161:11: BOOL
                    {
                    root_0 = (CommonTree)adaptor.nil();

                    BOOL190=(Token)match(input,BOOL,FOLLOW_BOOL_in_exp_atomica1823); 
                    BOOL190_tree = (CommonTree)adaptor.create(BOOL190);
                    adaptor.addChild(root_0, BOOL190_tree);


                    }
                    break;
                case 5 :
                    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:162:11: id
                    {
                    root_0 = (CommonTree)adaptor.nil();

                    pushFollow(FOLLOW_id_in_exp_atomica1836);
                    id191=id();

                    state._fsp--;

                    adaptor.addChild(root_0, id191.getTree());

                    }
                    break;
                case 6 :
                    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:163:11: procedure_chamada
                    {
                    pushFollow(FOLLOW_procedure_chamada_in_exp_atomica1849);
                    procedure_chamada192=procedure_chamada();

                    state._fsp--;

                    stream_procedure_chamada.add(procedure_chamada192.getTree());


                    // AST REWRITE
                    // elements: procedure_chamada
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

                    root_0 = (CommonTree)adaptor.nil();
                    // 163:29: -> ^( FUNC_CALL_EXPRESSION procedure_chamada )
                    {
                        // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:163:32: ^( FUNC_CALL_EXPRESSION procedure_chamada )
                        {
                        CommonTree root_1 = (CommonTree)adaptor.nil();
                        root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(FUNC_CALL_EXPRESSION, "FUNC_CALL_EXPRESSION"), root_1);

                        adaptor.addChild(root_1, stream_procedure_chamada.nextTree());

                        adaptor.addChild(root_0, root_1);
                        }

                    }

                    retval.tree = root_0;
                    }
                    break;
                case 7 :
                    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:164:11: id_array
                    {
                    root_0 = (CommonTree)adaptor.nil();

                    pushFollow(FOLLOW_id_array_in_exp_atomica1869);
                    id_array193=id_array();

                    state._fsp--;

                    adaptor.addChild(root_0, id_array193.getTree());

                    }
                    break;

            }
            retval.stop = input.LT(-1);

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "exp_atomica"

    public static class string_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "string"
    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:166:1: string : string_ -> ^( STRING string_ ) ;
    public final gramaticaMM2Parser.string_return string() throws RecognitionException {
        gramaticaMM2Parser.string_return retval = new gramaticaMM2Parser.string_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        gramaticaMM2Parser.string__return string_194 = null;


        RewriteRuleSubtreeStream stream_string_=new RewriteRuleSubtreeStream(adaptor,"rule string_");
        try {
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:166:8: ( string_ -> ^( STRING string_ ) )
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:166:10: string_
            {
            pushFollow(FOLLOW_string__in_string1877);
            string_194=string_();

            state._fsp--;

            stream_string_.add(string_194.getTree());


            // AST REWRITE
            // elements: string_
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

            root_0 = (CommonTree)adaptor.nil();
            // 166:18: -> ^( STRING string_ )
            {
                // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:166:21: ^( STRING string_ )
                {
                CommonTree root_1 = (CommonTree)adaptor.nil();
                root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(STRING, "STRING"), root_1);

                adaptor.addChild(root_1, stream_string_.nextTree());

                adaptor.addChild(root_0, root_1);
                }

            }

            retval.tree = root_0;
            }

            retval.stop = input.LT(-1);

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "string"

    public static class string__return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "string_"
    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:168:1: string_ : ASPA ( DIGIT | LETTER )* ASPA ;
    public final gramaticaMM2Parser.string__return string_() throws RecognitionException {
        gramaticaMM2Parser.string__return retval = new gramaticaMM2Parser.string__return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token ASPA195=null;
        Token set196=null;
        Token ASPA197=null;

        CommonTree ASPA195_tree=null;
        CommonTree set196_tree=null;
        CommonTree ASPA197_tree=null;

        try {
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:168:9: ( ASPA ( DIGIT | LETTER )* ASPA )
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:168:11: ASPA ( DIGIT | LETTER )* ASPA
            {
            root_0 = (CommonTree)adaptor.nil();

            ASPA195=(Token)match(input,ASPA,FOLLOW_ASPA_in_string_1893); 
            ASPA195_tree = (CommonTree)adaptor.create(ASPA195);
            adaptor.addChild(root_0, ASPA195_tree);

            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:168:16: ( DIGIT | LETTER )*
            loop38:
            do {
                int alt38=2;
                int LA38_0 = input.LA(1);

                if ( ((LA38_0>=DIGIT && LA38_0<=LETTER)) ) {
                    alt38=1;
                }


                switch (alt38) {
            	case 1 :
            	    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:
            	    {
            	    set196=(Token)input.LT(1);
            	    if ( (input.LA(1)>=DIGIT && input.LA(1)<=LETTER) ) {
            	        input.consume();
            	        adaptor.addChild(root_0, (CommonTree)adaptor.create(set196));
            	        state.errorRecovery=false;
            	    }
            	    else {
            	        MismatchedSetException mse = new MismatchedSetException(null,input);
            	        throw mse;
            	    }


            	    }
            	    break;

            	default :
            	    break loop38;
                }
            } while (true);

            ASPA197=(Token)match(input,ASPA,FOLLOW_ASPA_in_string_1903); 
            ASPA197_tree = (CommonTree)adaptor.create(ASPA197);
            adaptor.addChild(root_0, ASPA197_tree);


            }

            retval.stop = input.LT(-1);

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "string_"

    public static class caracter_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "caracter"
    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:170:1: caracter : caracter_ -> ^( CARACTER caracter_ ) ;
    public final gramaticaMM2Parser.caracter_return caracter() throws RecognitionException {
        gramaticaMM2Parser.caracter_return retval = new gramaticaMM2Parser.caracter_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        gramaticaMM2Parser.caracter__return caracter_198 = null;


        RewriteRuleSubtreeStream stream_caracter_=new RewriteRuleSubtreeStream(adaptor,"rule caracter_");
        try {
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:170:9: ( caracter_ -> ^( CARACTER caracter_ ) )
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:170:11: caracter_
            {
            pushFollow(FOLLOW_caracter__in_caracter1910);
            caracter_198=caracter_();

            state._fsp--;

            stream_caracter_.add(caracter_198.getTree());


            // AST REWRITE
            // elements: caracter_
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

            root_0 = (CommonTree)adaptor.nil();
            // 170:21: -> ^( CARACTER caracter_ )
            {
                // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:170:24: ^( CARACTER caracter_ )
                {
                CommonTree root_1 = (CommonTree)adaptor.nil();
                root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(CARACTER, "CARACTER"), root_1);

                adaptor.addChild(root_1, stream_caracter_.nextTree());

                adaptor.addChild(root_0, root_1);
                }

            }

            retval.tree = root_0;
            }

            retval.stop = input.LT(-1);

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "caracter"

    public static class caracter__return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "caracter_"
    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:172:1: caracter_ : ASPA ( DIGIT_NULL | DIGIT | LETTER )? ASPA ;
    public final gramaticaMM2Parser.caracter__return caracter_() throws RecognitionException {
        gramaticaMM2Parser.caracter__return retval = new gramaticaMM2Parser.caracter__return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token ASPA199=null;
        Token set200=null;
        Token ASPA201=null;

        CommonTree ASPA199_tree=null;
        CommonTree set200_tree=null;
        CommonTree ASPA201_tree=null;

        try {
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:172:10: ( ASPA ( DIGIT_NULL | DIGIT | LETTER )? ASPA )
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:172:12: ASPA ( DIGIT_NULL | DIGIT | LETTER )? ASPA
            {
            root_0 = (CommonTree)adaptor.nil();

            ASPA199=(Token)match(input,ASPA,FOLLOW_ASPA_in_caracter_1925); 
            ASPA199_tree = (CommonTree)adaptor.create(ASPA199);
            adaptor.addChild(root_0, ASPA199_tree);

            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:172:17: ( DIGIT_NULL | DIGIT | LETTER )?
            int alt39=2;
            int LA39_0 = input.LA(1);

            if ( (LA39_0==DIGIT_NULL||(LA39_0>=DIGIT && LA39_0<=LETTER)) ) {
                alt39=1;
            }
            switch (alt39) {
                case 1 :
                    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:
                    {
                    set200=(Token)input.LT(1);
                    if ( input.LA(1)==DIGIT_NULL||(input.LA(1)>=DIGIT && input.LA(1)<=LETTER) ) {
                        input.consume();
                        adaptor.addChild(root_0, (CommonTree)adaptor.create(set200));
                        state.errorRecovery=false;
                    }
                    else {
                        MismatchedSetException mse = new MismatchedSetException(null,input);
                        throw mse;
                    }


                    }
                    break;

            }

            ASPA201=(Token)match(input,ASPA,FOLLOW_ASPA_in_caracter_1937); 
            ASPA201_tree = (CommonTree)adaptor.create(ASPA201);
            adaptor.addChild(root_0, ASPA201_tree);


            }

            retval.stop = input.LT(-1);

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "caracter_"

    public static class int_positivo_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "int_positivo"
    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:174:1: int_positivo : int_positivo_literal -> ^( INT_POSITIVO int_positivo_literal ) ;
    public final gramaticaMM2Parser.int_positivo_return int_positivo() throws RecognitionException {
        gramaticaMM2Parser.int_positivo_return retval = new gramaticaMM2Parser.int_positivo_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        gramaticaMM2Parser.int_positivo_literal_return int_positivo_literal202 = null;


        RewriteRuleSubtreeStream stream_int_positivo_literal=new RewriteRuleSubtreeStream(adaptor,"rule int_positivo_literal");
        try {
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:174:14: ( int_positivo_literal -> ^( INT_POSITIVO int_positivo_literal ) )
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:174:16: int_positivo_literal
            {
            pushFollow(FOLLOW_int_positivo_literal_in_int_positivo1945);
            int_positivo_literal202=int_positivo_literal();

            state._fsp--;

            stream_int_positivo_literal.add(int_positivo_literal202.getTree());


            // AST REWRITE
            // elements: int_positivo_literal
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

            root_0 = (CommonTree)adaptor.nil();
            // 174:36: -> ^( INT_POSITIVO int_positivo_literal )
            {
                // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:174:38: ^( INT_POSITIVO int_positivo_literal )
                {
                CommonTree root_1 = (CommonTree)adaptor.nil();
                root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(INT_POSITIVO, "INT_POSITIVO"), root_1);

                adaptor.addChild(root_1, stream_int_positivo_literal.nextTree());

                adaptor.addChild(root_0, root_1);
                }

            }

            retval.tree = root_0;
            }

            retval.stop = input.LT(-1);

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "int_positivo"

    public static class int_positivo_literal_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "int_positivo_literal"
    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:176:1: int_positivo_literal : DIGIT ( DIGIT | DIGIT_NULL )* ;
    public final gramaticaMM2Parser.int_positivo_literal_return int_positivo_literal() throws RecognitionException {
        gramaticaMM2Parser.int_positivo_literal_return retval = new gramaticaMM2Parser.int_positivo_literal_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token DIGIT203=null;
        Token set204=null;

        CommonTree DIGIT203_tree=null;
        CommonTree set204_tree=null;

        try {
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:176:22: ( DIGIT ( DIGIT | DIGIT_NULL )* )
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:176:25: DIGIT ( DIGIT | DIGIT_NULL )*
            {
            root_0 = (CommonTree)adaptor.nil();

            DIGIT203=(Token)match(input,DIGIT,FOLLOW_DIGIT_in_int_positivo_literal1960); 
            DIGIT203_tree = (CommonTree)adaptor.create(DIGIT203);
            adaptor.addChild(root_0, DIGIT203_tree);

            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:176:30: ( DIGIT | DIGIT_NULL )*
            loop40:
            do {
                int alt40=2;
                int LA40_0 = input.LA(1);

                if ( (LA40_0==DIGIT_NULL||LA40_0==DIGIT) ) {
                    alt40=1;
                }


                switch (alt40) {
            	case 1 :
            	    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:
            	    {
            	    set204=(Token)input.LT(1);
            	    if ( input.LA(1)==DIGIT_NULL||input.LA(1)==DIGIT ) {
            	        input.consume();
            	        adaptor.addChild(root_0, (CommonTree)adaptor.create(set204));
            	        state.errorRecovery=false;
            	    }
            	    else {
            	        MismatchedSetException mse = new MismatchedSetException(null,input);
            	        throw mse;
            	    }


            	    }
            	    break;

            	default :
            	    break loop40;
                }
            } while (true);


            }

            retval.stop = input.LT(-1);

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "int_positivo_literal"

    public static class id_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "id"
    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:178:1: id : id_literal -> ^( ID id_literal ) ;
    public final gramaticaMM2Parser.id_return id() throws RecognitionException {
        gramaticaMM2Parser.id_return retval = new gramaticaMM2Parser.id_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        gramaticaMM2Parser.id_literal_return id_literal205 = null;


        RewriteRuleSubtreeStream stream_id_literal=new RewriteRuleSubtreeStream(adaptor,"rule id_literal");
        try {
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:178:4: ( id_literal -> ^( ID id_literal ) )
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:178:6: id_literal
            {
            pushFollow(FOLLOW_id_literal_in_id1974);
            id_literal205=id_literal();

            state._fsp--;

            stream_id_literal.add(id_literal205.getTree());


            // AST REWRITE
            // elements: id_literal
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

            root_0 = (CommonTree)adaptor.nil();
            // 178:17: -> ^( ID id_literal )
            {
                // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:178:20: ^( ID id_literal )
                {
                CommonTree root_1 = (CommonTree)adaptor.nil();
                root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(ID, "ID"), root_1);

                adaptor.addChild(root_1, stream_id_literal.nextTree());

                adaptor.addChild(root_0, root_1);
                }

            }

            retval.tree = root_0;
            }

            retval.stop = input.LT(-1);

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "id"

    public static class id_literal_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "id_literal"
    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:180:1: id_literal : LETTER ( LETTER | DIGIT | DIGIT_NULL )* ;
    public final gramaticaMM2Parser.id_literal_return id_literal() throws RecognitionException {
        gramaticaMM2Parser.id_literal_return retval = new gramaticaMM2Parser.id_literal_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token LETTER206=null;
        Token set207=null;

        CommonTree LETTER206_tree=null;
        CommonTree set207_tree=null;

        try {
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:180:12: ( LETTER ( LETTER | DIGIT | DIGIT_NULL )* )
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:180:14: LETTER ( LETTER | DIGIT | DIGIT_NULL )*
            {
            root_0 = (CommonTree)adaptor.nil();

            LETTER206=(Token)match(input,LETTER,FOLLOW_LETTER_in_id_literal1991); 
            LETTER206_tree = (CommonTree)adaptor.create(LETTER206);
            adaptor.addChild(root_0, LETTER206_tree);

            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:180:21: ( LETTER | DIGIT | DIGIT_NULL )*
            loop41:
            do {
                int alt41=2;
                int LA41_0 = input.LA(1);

                if ( (LA41_0==DIGIT_NULL||(LA41_0>=DIGIT && LA41_0<=LETTER)) ) {
                    alt41=1;
                }


                switch (alt41) {
            	case 1 :
            	    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:
            	    {
            	    set207=(Token)input.LT(1);
            	    if ( input.LA(1)==DIGIT_NULL||(input.LA(1)>=DIGIT && input.LA(1)<=LETTER) ) {
            	        input.consume();
            	        adaptor.addChild(root_0, (CommonTree)adaptor.create(set207));
            	        state.errorRecovery=false;
            	    }
            	    else {
            	        MismatchedSetException mse = new MismatchedSetException(null,input);
            	        throw mse;
            	    }


            	    }
            	    break;

            	default :
            	    break loop41;
                }
            } while (true);


            }

            retval.stop = input.LT(-1);

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "id_literal"

    public static class id_array_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "id_array"
    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:182:1: id_array : id ( LEFT_BRACKET exp_aritmetica RIGHT_BRACKET ) -> ^( ID_ARRAY id exp_aritmetica ) ;
    public final gramaticaMM2Parser.id_array_return id_array() throws RecognitionException {
        gramaticaMM2Parser.id_array_return retval = new gramaticaMM2Parser.id_array_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token LEFT_BRACKET209=null;
        Token RIGHT_BRACKET211=null;
        gramaticaMM2Parser.id_return id208 = null;

        gramaticaMM2Parser.exp_aritmetica_return exp_aritmetica210 = null;


        CommonTree LEFT_BRACKET209_tree=null;
        CommonTree RIGHT_BRACKET211_tree=null;
        RewriteRuleTokenStream stream_LEFT_BRACKET=new RewriteRuleTokenStream(adaptor,"token LEFT_BRACKET");
        RewriteRuleTokenStream stream_RIGHT_BRACKET=new RewriteRuleTokenStream(adaptor,"token RIGHT_BRACKET");
        RewriteRuleSubtreeStream stream_id=new RewriteRuleSubtreeStream(adaptor,"rule id");
        RewriteRuleSubtreeStream stream_exp_aritmetica=new RewriteRuleSubtreeStream(adaptor,"rule exp_aritmetica");
        try {
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:182:10: ( id ( LEFT_BRACKET exp_aritmetica RIGHT_BRACKET ) -> ^( ID_ARRAY id exp_aritmetica ) )
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:182:12: id ( LEFT_BRACKET exp_aritmetica RIGHT_BRACKET )
            {
            pushFollow(FOLLOW_id_in_id_array2013);
            id208=id();

            state._fsp--;

            stream_id.add(id208.getTree());
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:182:15: ( LEFT_BRACKET exp_aritmetica RIGHT_BRACKET )
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:182:16: LEFT_BRACKET exp_aritmetica RIGHT_BRACKET
            {
            LEFT_BRACKET209=(Token)match(input,LEFT_BRACKET,FOLLOW_LEFT_BRACKET_in_id_array2016);  
            stream_LEFT_BRACKET.add(LEFT_BRACKET209);

            pushFollow(FOLLOW_exp_aritmetica_in_id_array2018);
            exp_aritmetica210=exp_aritmetica();

            state._fsp--;

            stream_exp_aritmetica.add(exp_aritmetica210.getTree());
            RIGHT_BRACKET211=(Token)match(input,RIGHT_BRACKET,FOLLOW_RIGHT_BRACKET_in_id_array2020);  
            stream_RIGHT_BRACKET.add(RIGHT_BRACKET211);


            }



            // AST REWRITE
            // elements: id, exp_aritmetica
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

            root_0 = (CommonTree)adaptor.nil();
            // 182:58: -> ^( ID_ARRAY id exp_aritmetica )
            {
                // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:182:61: ^( ID_ARRAY id exp_aritmetica )
                {
                CommonTree root_1 = (CommonTree)adaptor.nil();
                root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(ID_ARRAY, "ID_ARRAY"), root_1);

                adaptor.addChild(root_1, stream_id.nextTree());
                adaptor.addChild(root_1, stream_exp_aritmetica.nextTree());

                adaptor.addChild(root_0, root_1);
                }

            }

            retval.tree = root_0;
            }

            retval.stop = input.LT(-1);

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "id_array"

    public static class procedure_chamada_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "procedure_chamada"
    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:184:1: procedure_chamada : id LEFT_PAREN ( lista_args | ) RIGHT_PAREN ;
    public final gramaticaMM2Parser.procedure_chamada_return procedure_chamada() throws RecognitionException {
        gramaticaMM2Parser.procedure_chamada_return retval = new gramaticaMM2Parser.procedure_chamada_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token LEFT_PAREN213=null;
        Token RIGHT_PAREN215=null;
        gramaticaMM2Parser.id_return id212 = null;

        gramaticaMM2Parser.lista_args_return lista_args214 = null;


        CommonTree LEFT_PAREN213_tree=null;
        CommonTree RIGHT_PAREN215_tree=null;

        try {
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:184:19: ( id LEFT_PAREN ( lista_args | ) RIGHT_PAREN )
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:184:21: id LEFT_PAREN ( lista_args | ) RIGHT_PAREN
            {
            root_0 = (CommonTree)adaptor.nil();

            pushFollow(FOLLOW_id_in_procedure_chamada2038);
            id212=id();

            state._fsp--;

            adaptor.addChild(root_0, id212.getTree());
            LEFT_PAREN213=(Token)match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_procedure_chamada2040); 
            LEFT_PAREN213_tree = (CommonTree)adaptor.create(LEFT_PAREN213);
            adaptor.addChild(root_0, LEFT_PAREN213_tree);

            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:184:35: ( lista_args | )
            int alt42=2;
            int LA42_0 = input.LA(1);

            if ( ((LA42_0>=NOT && LA42_0<=MINUS)||LA42_0==LEFT_PAREN||LA42_0==DIGIT_NULL||LA42_0==ASPA||(LA42_0>=BOOL && LA42_0<=LETTER)) ) {
                alt42=1;
            }
            else if ( (LA42_0==RIGHT_PAREN) ) {
                alt42=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 42, 0, input);

                throw nvae;
            }
            switch (alt42) {
                case 1 :
                    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:184:36: lista_args
                    {
                    pushFollow(FOLLOW_lista_args_in_procedure_chamada2043);
                    lista_args214=lista_args();

                    state._fsp--;

                    adaptor.addChild(root_0, lista_args214.getTree());

                    }
                    break;
                case 2 :
                    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:184:47: 
                    {
                    }
                    break;

            }

            RIGHT_PAREN215=(Token)match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_procedure_chamada2047); 
            RIGHT_PAREN215_tree = (CommonTree)adaptor.create(RIGHT_PAREN215);
            adaptor.addChild(root_0, RIGHT_PAREN215_tree);


            }

            retval.stop = input.LT(-1);

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "procedure_chamada"

    public static class inteiro_return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "inteiro"
    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:186:1: inteiro : inteiro_ -> ^( INTEIRO inteiro_ ) ;
    public final gramaticaMM2Parser.inteiro_return inteiro() throws RecognitionException {
        gramaticaMM2Parser.inteiro_return retval = new gramaticaMM2Parser.inteiro_return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        gramaticaMM2Parser.inteiro__return inteiro_216 = null;


        RewriteRuleSubtreeStream stream_inteiro_=new RewriteRuleSubtreeStream(adaptor,"rule inteiro_");
        try {
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:186:9: ( inteiro_ -> ^( INTEIRO inteiro_ ) )
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:186:11: inteiro_
            {
            pushFollow(FOLLOW_inteiro__in_inteiro2055);
            inteiro_216=inteiro_();

            state._fsp--;

            stream_inteiro_.add(inteiro_216.getTree());


            // AST REWRITE
            // elements: inteiro_
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);

            root_0 = (CommonTree)adaptor.nil();
            // 186:20: -> ^( INTEIRO inteiro_ )
            {
                // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:186:23: ^( INTEIRO inteiro_ )
                {
                CommonTree root_1 = (CommonTree)adaptor.nil();
                root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(INTEIRO, "INTEIRO"), root_1);

                adaptor.addChild(root_1, stream_inteiro_.nextTree());

                adaptor.addChild(root_0, root_1);
                }

            }

            retval.tree = root_0;
            }

            retval.stop = input.LT(-1);

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "inteiro"

    public static class inteiro__return extends ParserRuleReturnScope {
        CommonTree tree;
        public Object getTree() { return tree; }
    };

    // $ANTLR start "inteiro_"
    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:188:1: inteiro_ : ( DIGIT_NULL | int_positivo ) ;
    public final gramaticaMM2Parser.inteiro__return inteiro_() throws RecognitionException {
        gramaticaMM2Parser.inteiro__return retval = new gramaticaMM2Parser.inteiro__return();
        retval.start = input.LT(1);

        CommonTree root_0 = null;

        Token DIGIT_NULL217=null;
        gramaticaMM2Parser.int_positivo_return int_positivo218 = null;


        CommonTree DIGIT_NULL217_tree=null;

        try {
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:188:10: ( ( DIGIT_NULL | int_positivo ) )
            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:188:12: ( DIGIT_NULL | int_positivo )
            {
            root_0 = (CommonTree)adaptor.nil();

            // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:188:12: ( DIGIT_NULL | int_positivo )
            int alt43=2;
            int LA43_0 = input.LA(1);

            if ( (LA43_0==DIGIT_NULL) ) {
                alt43=1;
            }
            else if ( (LA43_0==DIGIT) ) {
                alt43=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 43, 0, input);

                throw nvae;
            }
            switch (alt43) {
                case 1 :
                    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:188:13: DIGIT_NULL
                    {
                    DIGIT_NULL217=(Token)match(input,DIGIT_NULL,FOLLOW_DIGIT_NULL_in_inteiro_2073); 
                    DIGIT_NULL217_tree = (CommonTree)adaptor.create(DIGIT_NULL217);
                    adaptor.addChild(root_0, DIGIT_NULL217_tree);


                    }
                    break;
                case 2 :
                    // C:\\Documents and Settings\\sb\\Desktop\\gramaticaMM2.g:188:26: int_positivo
                    {
                    pushFollow(FOLLOW_int_positivo_in_inteiro_2077);
                    int_positivo218=int_positivo();

                    state._fsp--;

                    adaptor.addChild(root_0, int_positivo218.getTree());

                    }
                    break;

            }


            }

            retval.stop = input.LT(-1);

            retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }
        finally {
        }
        return retval;
    }
    // $ANTLR end "inteiro_"

    // Delegated rules


    protected DFA2 dfa2 = new DFA2(this);
    protected DFA22 dfa22 = new DFA22(this);
    protected DFA25 dfa25 = new DFA25(this);
    protected DFA37 dfa37 = new DFA37(this);
    static final String DFA2_eotS =
        "\22\uffff";
    static final String DFA2_eofS =
        "\22\uffff";
    static final String DFA2_minS =
        "\1\7\1\146\1\uffff\2\53\1\54\3\50\1\24\2\uffff\1\47\1\146\2\50"+
        "\1\24\1\47";
    static final String DFA2_maxS =
        "\1\17\1\146\1\uffff\4\146\1\51\1\146\1\26\2\uffff\1\54\3\146\1"+
        "\26\1\54";
    static final String DFA2_acceptS =
        "\2\uffff\1\2\7\uffff\1\1\1\3\6\uffff";
    static final String DFA2_specialS =
        "\22\uffff}>";
    static final String[] DFA2_transitionS = {
            "\1\2\7\uffff\1\1",
            "\1\3",
            "",
            "\1\5\3\uffff\1\4\65\uffff\2\4",
            "\1\5\3\uffff\1\4\65\uffff\2\4",
            "\1\7\71\uffff\1\6",
            "\1\11\6\uffff\1\10\65\uffff\2\10",
            "\1\13\1\12",
            "\1\11\6\uffff\1\10\65\uffff\2\10",
            "\3\14",
            "",
            "",
            "\1\15\4\uffff\1\7",
            "\1\16",
            "\1\20\6\uffff\1\17\65\uffff\2\17",
            "\1\20\6\uffff\1\17\65\uffff\2\17",
            "\3\21",
            "\1\15\4\uffff\1\7"
    };

    static final short[] DFA2_eot = DFA.unpackEncodedString(DFA2_eotS);
    static final short[] DFA2_eof = DFA.unpackEncodedString(DFA2_eofS);
    static final char[] DFA2_min = DFA.unpackEncodedStringToUnsignedChars(DFA2_minS);
    static final char[] DFA2_max = DFA.unpackEncodedStringToUnsignedChars(DFA2_maxS);
    static final short[] DFA2_accept = DFA.unpackEncodedString(DFA2_acceptS);
    static final short[] DFA2_special = DFA.unpackEncodedString(DFA2_specialS);
    static final short[][] DFA2_transition;

    static {
        int numStates = DFA2_transitionS.length;
        DFA2_transition = new short[numStates][];
        for (int i=0; i<numStates; i++) {
            DFA2_transition[i] = DFA.unpackEncodedString(DFA2_transitionS[i]);
        }
    }

    class DFA2 extends DFA {

        public DFA2(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 2;
            this.eot = DFA2_eot;
            this.eof = DFA2_eof;
            this.min = DFA2_min;
            this.max = DFA2_max;
            this.accept = DFA2_accept;
            this.special = DFA2_special;
            this.transition = DFA2_transition;
        }
        public String getDescription() {
            return "87:19: ( declaracao_procedimento | declaracao_variaveis | declaracao_funcao )";
        }
    }
    static final String DFA22_eotS =
        "\17\uffff";
    static final String DFA22_eofS =
        "\17\uffff";
    static final String DFA22_minS =
        "\1\11\1\46\11\uffff\1\46\3\uffff";
    static final String DFA22_maxS =
        "\2\146\11\uffff\1\146\3\uffff";
    static final String DFA22_acceptS =
        "\2\uffff\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13\1\14\1\uffff\1\3\1"+
        "\1\1\2";
    static final String DFA22_specialS =
        "\17\uffff}>";
    static final String[] DFA22_transitionS = {
            "\1\2\2\uffff\1\5\1\3\1\4\43\uffff\1\6\1\7\1\10\1\12\1\11\57"+
            "\uffff\1\1",
            "\1\15\4\uffff\1\14\1\uffff\1\16\1\uffff\1\13\65\uffff\2\13",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\1\15\4\uffff\1\14\1\uffff\1\16\1\uffff\1\13\65\uffff\2\13",
            "",
            "",
            ""
    };

    static final short[] DFA22_eot = DFA.unpackEncodedString(DFA22_eotS);
    static final short[] DFA22_eof = DFA.unpackEncodedString(DFA22_eofS);
    static final char[] DFA22_min = DFA.unpackEncodedStringToUnsignedChars(DFA22_minS);
    static final char[] DFA22_max = DFA.unpackEncodedStringToUnsignedChars(DFA22_maxS);
    static final short[] DFA22_accept = DFA.unpackEncodedString(DFA22_acceptS);
    static final short[] DFA22_special = DFA.unpackEncodedString(DFA22_specialS);
    static final short[][] DFA22_transition;

    static {
        int numStates = DFA22_transitionS.length;
        DFA22_transition = new short[numStates][];
        for (int i=0; i<numStates; i++) {
            DFA22_transition[i] = DFA.unpackEncodedString(DFA22_transitionS[i]);
        }
    }

    class DFA22 extends DFA {

        public DFA22(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 22;
            this.eot = DFA22_eot;
            this.eof = DFA22_eof;
            this.min = DFA22_min;
            this.max = DFA22_max;
            this.accept = DFA22_accept;
            this.special = DFA22_special;
            this.transition = DFA22_transition;
        }
        public String getDescription() {
            return "119:1: lista_comandos : ( id ASSIGN expressao SEMICOLON -> ^( ASSIGN_COMMAND_ID id expressao ) | id_array ASSIGN expressao SEMICOLON -> ^( ASSIGN_COMMAND_ID_ARRAY id_array expressao ) | procedure_chamada SEMICOLON -> ^( CALL_COMMAND procedure_chamada ) | IF expressao THEN ( lista_comandos )? ( | ELSE ( lista_comandos )? ) END SEMICOLON -> ^( IF_COMMAND expressao ( lista_comandos )? ( lista_comandos )? ) | FOR id ASSIGN expressao TO expressao BY expressao DO ( lista_comandos )? END SEMICOLON -> ^( FOR_COMMAND id expressao expressao expressao ( lista_comandos )? ) | WHILE expressao DO ( lista_comandos )? END SEMICOLON -> ^( WHILE_COMMAND expressao ( lista_comandos )? ) | CASE id OF lista_numeros COLON ( lista_comandos )? ( BAR lista_numeros COLON ( lista_comandos )? )* ELSE ( lista_comandos )? END SEMICOLON -> ^( CASE_COMMAND id ( lista_numeros ( lista_comandos )? )+ ( lista_comandos )? ) | WRITEINT LEFT_PAREN expressao RIGHT_PAREN SEMICOLON -> ^( WRITEINT_COMMAND expressao ) | WRITECHAR LEFT_PAREN expressao RIGHT_PAREN SEMICOLON -> ^( WRITECHAR_COMMAND expressao ) | WRITEBOOL LEFT_PAREN expressao RIGHT_PAREN SEMICOLON -> ^( WRITEBOOL_COMMAND expressao ) | WRITELN SEMICOLON -> ^( WRITELN_COMMAND ) | WRITESTRING LEFT_PAREN string RIGHT_PAREN SEMICOLON -> ^( WRITESTRING_COMMAND string ) );";
        }
    }
    static final String DFA25_eotS =
        "\6\uffff";
    static final String DFA25_eofS =
        "\6\uffff";
    static final String DFA25_minS =
        "\1\57\2\47\2\uffff\1\47";
    static final String DFA25_maxS =
        "\1\145\1\52\1\145\2\uffff\1\145";
    static final String DFA25_acceptS =
        "\3\uffff\1\2\1\1\1\uffff";
    static final String DFA25_specialS =
        "\6\uffff}>";
    static final String[] DFA25_transitionS = {
            "\1\1\65\uffff\1\2",
            "\2\3\1\uffff\1\4",
            "\2\3\1\uffff\1\4\4\uffff\1\5\65\uffff\1\5",
            "",
            "",
            "\2\3\1\uffff\1\4\4\uffff\1\5\65\uffff\1\5"
    };

    static final short[] DFA25_eot = DFA.unpackEncodedString(DFA25_eotS);
    static final short[] DFA25_eof = DFA.unpackEncodedString(DFA25_eofS);
    static final char[] DFA25_min = DFA.unpackEncodedStringToUnsignedChars(DFA25_minS);
    static final char[] DFA25_max = DFA.unpackEncodedStringToUnsignedChars(DFA25_maxS);
    static final short[] DFA25_accept = DFA.unpackEncodedString(DFA25_acceptS);
    static final short[] DFA25_special = DFA.unpackEncodedString(DFA25_specialS);
    static final short[][] DFA25_transition;

    static {
        int numStates = DFA25_transitionS.length;
        DFA25_transition = new short[numStates][];
        for (int i=0; i<numStates; i++) {
            DFA25_transition[i] = DFA.unpackEncodedString(DFA25_transitionS[i]);
        }
    }

    class DFA25 extends DFA {

        public DFA25(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 25;
            this.eot = DFA25_eot;
            this.eof = DFA25_eof;
            this.min = DFA25_min;
            this.max = DFA25_max;
            this.accept = DFA25_accept;
            this.special = DFA25_special;
            this.transition = DFA25_transition;
        }
        public String getDescription() {
            return "136:1: lista_numeros : ( inteiro DOT DOT inteiro -> ^( LIST_NUMBER_RANGE inteiro inteiro ) | inteiro ( COMMA inteiro )* -> ^( LIST_NUMBER ( inteiro )+ ) );";
        }
    }
    static final String DFA37_eotS =
        "\12\uffff";
    static final String DFA37_eofS =
        "\12\uffff";
    static final String DFA37_minS =
        "\1\53\4\uffff\2\12\3\uffff";
    static final String DFA37_maxS =
        "\1\146\4\uffff\2\146\3\uffff";
    static final String DFA37_acceptS =
        "\1\uffff\1\1\1\2\1\3\1\4\2\uffff\1\6\1\5\1\7";
    static final String DFA37_specialS =
        "\12\uffff}>";
    static final String[] DFA37_transitionS = {
            "\1\1\3\uffff\1\2\1\uffff\1\3\62\uffff\1\4\1\2\1\5",
            "",
            "",
            "",
            "",
            "\1\10\6\uffff\3\10\5\uffff\15\10\1\uffff\1\10\1\uffff\1\10"+
            "\1\uffff\1\7\1\10\1\11\1\10\1\6\65\uffff\2\6",
            "\1\10\6\uffff\3\10\5\uffff\15\10\1\uffff\1\10\1\uffff\1\10"+
            "\1\uffff\1\7\1\10\1\11\1\10\1\6\65\uffff\2\6",
            "",
            "",
            ""
    };

    static final short[] DFA37_eot = DFA.unpackEncodedString(DFA37_eotS);
    static final short[] DFA37_eof = DFA.unpackEncodedString(DFA37_eofS);
    static final char[] DFA37_min = DFA.unpackEncodedStringToUnsignedChars(DFA37_minS);
    static final char[] DFA37_max = DFA.unpackEncodedStringToUnsignedChars(DFA37_maxS);
    static final short[] DFA37_accept = DFA.unpackEncodedString(DFA37_acceptS);
    static final short[] DFA37_special = DFA.unpackEncodedString(DFA37_specialS);
    static final short[][] DFA37_transition;

    static {
        int numStates = DFA37_transitionS.length;
        DFA37_transition = new short[numStates][];
        for (int i=0; i<numStates; i++) {
            DFA37_transition[i] = DFA.unpackEncodedString(DFA37_transitionS[i]);
        }
    }

    class DFA37 extends DFA {

        public DFA37(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 37;
            this.eot = DFA37_eot;
            this.eof = DFA37_eof;
            this.min = DFA37_min;
            this.max = DFA37_max;
            this.accept = DFA37_accept;
            this.special = DFA37_special;
            this.transition = DFA37_transition;
        }
        public String getDescription() {
            return "158:1: exp_atomica : ( LEFT_PAREN expressao RIGHT_PAREN -> ^( PEREN_EXP expressao ) | inteiro | caracter | BOOL | id | procedure_chamada -> ^( FUNC_CALL_EXPRESSION procedure_chamada ) | id_array );";
        }
    }
 

    public static final BitSet FOLLOW_cabecalho_in_programa578 = new BitSet(new long[]{0x00000000000080A0L});
    public static final BitSet FOLLOW_declaracoes_in_programa580 = new BitSet(new long[]{0x00000000000080A0L});
    public static final BitSet FOLLOW_corpo_in_programa583 = new BitSet(new long[]{0x0000000000000000L,0x0000004000000000L});
    public static final BitSet FOLLOW_id_in_programa585 = new BitSet(new long[]{0x0000040000000000L});
    public static final BitSet FOLLOW_DOT_in_programa587 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_programa589 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_MODULE_in_cabecalho614 = new BitSet(new long[]{0x0000000000000000L,0x0000004000000000L});
    public static final BitSet FOLLOW_id_in_cabecalho616 = new BitSet(new long[]{0x0000020000000000L});
    public static final BitSet FOLLOW_SEMICOLON_in_cabecalho618 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_tipo_declaracao_in_declaracoes637 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_declaracao_procedimento_in_tipo_declaracao657 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_declaracao_variaveis_in_tipo_declaracao664 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_declaracao_funcao_in_tipo_declaracao671 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_PROCEDURE_in_declaracao_procedimento681 = new BitSet(new long[]{0x0000000000000000L,0x0000004000000000L});
    public static final BitSet FOLLOW_id_in_declaracao_procedimento683 = new BitSet(new long[]{0x0000080000000000L});
    public static final BitSet FOLLOW_LEFT_PAREN_in_declaracao_procedimento685 = new BitSet(new long[]{0x0000100000000000L,0x0000004000000000L});
    public static final BitSet FOLLOW_lista_parametros_in_declaracao_procedimento688 = new BitSet(new long[]{0x0000100000000000L});
    public static final BitSet FOLLOW_RIGHT_PAREN_in_declaracao_procedimento692 = new BitSet(new long[]{0x0000020000000000L});
    public static final BitSet FOLLOW_SEMICOLON_in_declaracao_procedimento694 = new BitSet(new long[]{0x00000000000080A0L});
    public static final BitSet FOLLOW_declaracao_variaveis_in_declaracao_procedimento696 = new BitSet(new long[]{0x00000000000080A0L});
    public static final BitSet FOLLOW_corpo_in_declaracao_procedimento699 = new BitSet(new long[]{0x0000000000000000L,0x0000004000000000L});
    public static final BitSet FOLLOW_id_in_declaracao_procedimento701 = new BitSet(new long[]{0x0000020000000000L});
    public static final BitSet FOLLOW_SEMICOLON_in_declaracao_procedimento703 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_PROCEDURE_in_declaracao_funcao732 = new BitSet(new long[]{0x0000000000000000L,0x0000004000000000L});
    public static final BitSet FOLLOW_id_in_declaracao_funcao734 = new BitSet(new long[]{0x0000080000000000L});
    public static final BitSet FOLLOW_LEFT_PAREN_in_declaracao_funcao736 = new BitSet(new long[]{0x0000100000000000L,0x0000004000000000L});
    public static final BitSet FOLLOW_lista_parametros_in_declaracao_funcao739 = new BitSet(new long[]{0x0000100000000000L});
    public static final BitSet FOLLOW_RIGHT_PAREN_in_declaracao_funcao743 = new BitSet(new long[]{0x0000010000000000L});
    public static final BitSet FOLLOW_COLON_in_declaracao_funcao745 = new BitSet(new long[]{0x0000000000700000L});
    public static final BitSet FOLLOW_tipo_in_declaracao_funcao747 = new BitSet(new long[]{0x0000020000000000L});
    public static final BitSet FOLLOW_SEMICOLON_in_declaracao_funcao749 = new BitSet(new long[]{0x00000000000080A0L});
    public static final BitSet FOLLOW_declaracao_variaveis_in_declaracao_funcao751 = new BitSet(new long[]{0x00000000000080A0L});
    public static final BitSet FOLLOW_corpo_return_in_declaracao_funcao754 = new BitSet(new long[]{0x0000000000000000L,0x0000004000000000L});
    public static final BitSet FOLLOW_id_in_declaracao_funcao756 = new BitSet(new long[]{0x0000020000000000L});
    public static final BitSet FOLLOW_SEMICOLON_in_declaracao_funcao758 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_VAR_in_declaracao_variaveis787 = new BitSet(new long[]{0x0000000000000000L,0x0000004000000000L});
    public static final BitSet FOLLOW_lista_variaveis_in_declaracao_variaveis789 = new BitSet(new long[]{0x0000000000000002L,0x0000004000000000L});
    public static final BitSet FOLLOW_id_in_lista_parametros809 = new BitSet(new long[]{0x0000010000000000L});
    public static final BitSet FOLLOW_COLON_in_lista_parametros811 = new BitSet(new long[]{0x0000000000700000L});
    public static final BitSet FOLLOW_tipo_in_lista_parametros813 = new BitSet(new long[]{0x0000008000000002L});
    public static final BitSet FOLLOW_COMMA_in_lista_parametros816 = new BitSet(new long[]{0x0000010000000000L,0x0000004000000000L});
    public static final BitSet FOLLOW_id_in_lista_parametros818 = new BitSet(new long[]{0x0000010000000000L});
    public static final BitSet FOLLOW_COLON_in_lista_parametros820 = new BitSet(new long[]{0x0000000000700000L});
    public static final BitSet FOLLOW_tipo_in_lista_parametros822 = new BitSet(new long[]{0x0000008000000002L});
    public static final BitSet FOLLOW_ARRAY_in_tipo_array849 = new BitSet(new long[]{0x0000200000000000L});
    public static final BitSet FOLLOW_LEFT_BRACKET_in_tipo_array851 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
    public static final BitSet FOLLOW_int_positivo_in_tipo_array853 = new BitSet(new long[]{0x0000040000000000L});
    public static final BitSet FOLLOW_DOT_in_tipo_array855 = new BitSet(new long[]{0x0000040000000000L});
    public static final BitSet FOLLOW_DOT_in_tipo_array857 = new BitSet(new long[]{0x0000000000000000L,0x0000002000000000L});
    public static final BitSet FOLLOW_int_positivo_in_tipo_array859 = new BitSet(new long[]{0x0000400000000000L});
    public static final BitSet FOLLOW_RIGHT_BRACKET_in_tipo_array861 = new BitSet(new long[]{0x0000000000000100L});
    public static final BitSet FOLLOW_OF_in_tipo_array863 = new BitSet(new long[]{0x0000000000700000L});
    public static final BitSet FOLLOW_tipo_in_tipo_array865 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_denotador_tipo_in_tipo885 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_set_in_denotador_tipo0 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_id_in_lista_variaveis919 = new BitSet(new long[]{0x0000018000000000L});
    public static final BitSet FOLLOW_COMMA_in_lista_variaveis922 = new BitSet(new long[]{0x0000018000000000L,0x0000004000000000L});
    public static final BitSet FOLLOW_id_in_lista_variaveis924 = new BitSet(new long[]{0x0000018000000000L});
    public static final BitSet FOLLOW_COLON_in_lista_variaveis928 = new BitSet(new long[]{0x0000000000F00000L});
    public static final BitSet FOLLOW_tipo_in_lista_variaveis931 = new BitSet(new long[]{0x0000020000000000L});
    public static final BitSet FOLLOW_SEMICOLON_in_lista_variaveis933 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_tipo_array_in_lista_variaveis948 = new BitSet(new long[]{0x0000020000000000L});
    public static final BitSet FOLLOW_SEMICOLON_in_lista_variaveis950 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_BEGIN_in_corpo975 = new BitSet(new long[]{0x007C284000007240L,0x0000004000000000L});
    public static final BitSet FOLLOW_lista_comandos_in_corpo978 = new BitSet(new long[]{0x007C284000007240L,0x0000004000000000L});
    public static final BitSet FOLLOW_END_in_corpo982 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_BEGIN_in_corpo_return1003 = new BitSet(new long[]{0x007C284000017240L,0x0000004000000000L});
    public static final BitSet FOLLOW_lista_comandos_in_corpo_return1006 = new BitSet(new long[]{0x007C284000017240L,0x0000004000000000L});
    public static final BitSet FOLLOW_RETURN_in_corpo_return1010 = new BitSet(new long[]{0x0002A80003000000L,0x0000007000000000L});
    public static final BitSet FOLLOW_expressao_in_corpo_return1012 = new BitSet(new long[]{0x0000020000000000L});
    public static final BitSet FOLLOW_SEMICOLON_in_corpo_return1014 = new BitSet(new long[]{0x0000000000000040L});
    public static final BitSet FOLLOW_END_in_corpo_return1016 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_id_in_lista_comandos1040 = new BitSet(new long[]{0x0000004000000000L});
    public static final BitSet FOLLOW_ASSIGN_in_lista_comandos1043 = new BitSet(new long[]{0x0002A80003000000L,0x0000007000000000L});
    public static final BitSet FOLLOW_expressao_in_lista_comandos1045 = new BitSet(new long[]{0x0000020000000000L});
    public static final BitSet FOLLOW_SEMICOLON_in_lista_comandos1047 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_id_array_in_lista_comandos1063 = new BitSet(new long[]{0x0000004000000000L});
    public static final BitSet FOLLOW_ASSIGN_in_lista_comandos1065 = new BitSet(new long[]{0x0002A80003000000L,0x0000007000000000L});
    public static final BitSet FOLLOW_expressao_in_lista_comandos1067 = new BitSet(new long[]{0x0000020000000000L});
    public static final BitSet FOLLOW_SEMICOLON_in_lista_comandos1069 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_procedure_chamada_in_lista_comandos1086 = new BitSet(new long[]{0x0000020000000000L});
    public static final BitSet FOLLOW_SEMICOLON_in_lista_comandos1088 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_IF_in_lista_comandos1103 = new BitSet(new long[]{0x0002A80003000000L,0x0000007000000000L});
    public static final BitSet FOLLOW_expressao_in_lista_comandos1105 = new BitSet(new long[]{0x0000000000000400L});
    public static final BitSet FOLLOW_THEN_in_lista_comandos1107 = new BitSet(new long[]{0x007C284000017A40L,0x0000004000000000L});
    public static final BitSet FOLLOW_lista_comandos_in_lista_comandos1109 = new BitSet(new long[]{0x0000000000000840L});
    public static final BitSet FOLLOW_ELSE_in_lista_comandos1115 = new BitSet(new long[]{0x007C284000017240L,0x0000004000000000L});
    public static final BitSet FOLLOW_lista_comandos_in_lista_comandos1117 = new BitSet(new long[]{0x0000000000000040L});
    public static final BitSet FOLLOW_END_in_lista_comandos1121 = new BitSet(new long[]{0x0000020000000000L});
    public static final BitSet FOLLOW_SEMICOLON_in_lista_comandos1123 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_FOR_in_lista_comandos1144 = new BitSet(new long[]{0x0000004000000000L,0x0000004000000000L});
    public static final BitSet FOLLOW_id_in_lista_comandos1146 = new BitSet(new long[]{0x0000004000000000L});
    public static final BitSet FOLLOW_ASSIGN_in_lista_comandos1148 = new BitSet(new long[]{0x0002A80003000000L,0x0000007000000000L});
    public static final BitSet FOLLOW_expressao_in_lista_comandos1150 = new BitSet(new long[]{0x0000000000020000L});
    public static final BitSet FOLLOW_TO_in_lista_comandos1152 = new BitSet(new long[]{0x0002A80003000000L,0x0000007000000000L});
    public static final BitSet FOLLOW_expressao_in_lista_comandos1154 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_BY_in_lista_comandos1156 = new BitSet(new long[]{0x0002A80003000000L,0x0000007000000000L});
    public static final BitSet FOLLOW_expressao_in_lista_comandos1158 = new BitSet(new long[]{0x0000000000080000L});
    public static final BitSet FOLLOW_DO_in_lista_comandos1160 = new BitSet(new long[]{0x007C284000017240L,0x0000004000000000L});
    public static final BitSet FOLLOW_lista_comandos_in_lista_comandos1162 = new BitSet(new long[]{0x0000000000000040L});
    public static final BitSet FOLLOW_END_in_lista_comandos1165 = new BitSet(new long[]{0x0000020000000000L});
    public static final BitSet FOLLOW_SEMICOLON_in_lista_comandos1167 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_WHILE_in_lista_comandos1191 = new BitSet(new long[]{0x0002A80003000000L,0x0000007000000000L});
    public static final BitSet FOLLOW_expressao_in_lista_comandos1193 = new BitSet(new long[]{0x0000000000080000L});
    public static final BitSet FOLLOW_DO_in_lista_comandos1195 = new BitSet(new long[]{0x007C284000017240L,0x0000004000000000L});
    public static final BitSet FOLLOW_lista_comandos_in_lista_comandos1197 = new BitSet(new long[]{0x0000000000000040L});
    public static final BitSet FOLLOW_END_in_lista_comandos1200 = new BitSet(new long[]{0x0000020000000000L});
    public static final BitSet FOLLOW_SEMICOLON_in_lista_comandos1202 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_CASE_in_lista_comandos1220 = new BitSet(new long[]{0x0000000000000100L,0x0000004000000000L});
    public static final BitSet FOLLOW_id_in_lista_comandos1222 = new BitSet(new long[]{0x0000000000000100L});
    public static final BitSet FOLLOW_OF_in_lista_comandos1224 = new BitSet(new long[]{0x0000800000000000L,0x0000002000000000L});
    public static final BitSet FOLLOW_lista_numeros_in_lista_comandos1226 = new BitSet(new long[]{0x0000010000000000L});
    public static final BitSet FOLLOW_COLON_in_lista_comandos1228 = new BitSet(new long[]{0x007D284000017A40L,0x0000004000000000L});
    public static final BitSet FOLLOW_lista_comandos_in_lista_comandos1230 = new BitSet(new long[]{0x0001000000000800L});
    public static final BitSet FOLLOW_BAR_in_lista_comandos1233 = new BitSet(new long[]{0x0000800000000000L,0x0000002000000000L});
    public static final BitSet FOLLOW_lista_numeros_in_lista_comandos1235 = new BitSet(new long[]{0x0000010000000000L});
    public static final BitSet FOLLOW_COLON_in_lista_comandos1237 = new BitSet(new long[]{0x007D284000017A40L,0x0000004000000000L});
    public static final BitSet FOLLOW_lista_comandos_in_lista_comandos1239 = new BitSet(new long[]{0x0001000000000800L});
    public static final BitSet FOLLOW_ELSE_in_lista_comandos1244 = new BitSet(new long[]{0x007C284000017240L,0x0000004000000000L});
    public static final BitSet FOLLOW_lista_comandos_in_lista_comandos1246 = new BitSet(new long[]{0x0000000000000040L});
    public static final BitSet FOLLOW_END_in_lista_comandos1249 = new BitSet(new long[]{0x0000020000000000L});
    public static final BitSet FOLLOW_SEMICOLON_in_lista_comandos1251 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_WRITEINT_in_lista_comandos1280 = new BitSet(new long[]{0x0000080000000000L});
    public static final BitSet FOLLOW_LEFT_PAREN_in_lista_comandos1282 = new BitSet(new long[]{0x0002A80003000000L,0x0000007000000000L});
    public static final BitSet FOLLOW_expressao_in_lista_comandos1284 = new BitSet(new long[]{0x0000100000000000L});
    public static final BitSet FOLLOW_RIGHT_PAREN_in_lista_comandos1286 = new BitSet(new long[]{0x0000020000000000L});
    public static final BitSet FOLLOW_SEMICOLON_in_lista_comandos1288 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_WRITECHAR_in_lista_comandos1303 = new BitSet(new long[]{0x0000080000000000L});
    public static final BitSet FOLLOW_LEFT_PAREN_in_lista_comandos1305 = new BitSet(new long[]{0x0002A80003000000L,0x0000007000000000L});
    public static final BitSet FOLLOW_expressao_in_lista_comandos1307 = new BitSet(new long[]{0x0000100000000000L});
    public static final BitSet FOLLOW_RIGHT_PAREN_in_lista_comandos1309 = new BitSet(new long[]{0x0000020000000000L});
    public static final BitSet FOLLOW_SEMICOLON_in_lista_comandos1311 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_WRITEBOOL_in_lista_comandos1326 = new BitSet(new long[]{0x0000080000000000L});
    public static final BitSet FOLLOW_LEFT_PAREN_in_lista_comandos1328 = new BitSet(new long[]{0x0002A80003000000L,0x0000007000000000L});
    public static final BitSet FOLLOW_expressao_in_lista_comandos1330 = new BitSet(new long[]{0x0000100000000000L});
    public static final BitSet FOLLOW_RIGHT_PAREN_in_lista_comandos1332 = new BitSet(new long[]{0x0000020000000000L});
    public static final BitSet FOLLOW_SEMICOLON_in_lista_comandos1334 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_WRITELN_in_lista_comandos1349 = new BitSet(new long[]{0x0000020000000000L});
    public static final BitSet FOLLOW_SEMICOLON_in_lista_comandos1351 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_WRITESTRING_in_lista_comandos1364 = new BitSet(new long[]{0x0000080000000000L});
    public static final BitSet FOLLOW_LEFT_PAREN_in_lista_comandos1366 = new BitSet(new long[]{0x0002000000000000L});
    public static final BitSet FOLLOW_string_in_lista_comandos1368 = new BitSet(new long[]{0x0000100000000000L});
    public static final BitSet FOLLOW_RIGHT_PAREN_in_lista_comandos1370 = new BitSet(new long[]{0x0000020000000000L});
    public static final BitSet FOLLOW_SEMICOLON_in_lista_comandos1372 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_expressao_in_lista_args1391 = new BitSet(new long[]{0x0000008000000002L});
    public static final BitSet FOLLOW_COMMA_in_lista_args1393 = new BitSet(new long[]{0x0002A80003000000L,0x0000007000000000L});
    public static final BitSet FOLLOW_expressao_in_lista_args1395 = new BitSet(new long[]{0x0000008000000002L});
    public static final BitSet FOLLOW_inteiro_in_lista_numeros1416 = new BitSet(new long[]{0x0000040000000000L});
    public static final BitSet FOLLOW_DOT_in_lista_numeros1418 = new BitSet(new long[]{0x0000040000000000L});
    public static final BitSet FOLLOW_DOT_in_lista_numeros1420 = new BitSet(new long[]{0x0000800000000000L,0x0000002000000000L});
    public static final BitSet FOLLOW_inteiro_in_lista_numeros1422 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_inteiro_in_lista_numeros1438 = new BitSet(new long[]{0x0000008000000002L});
    public static final BitSet FOLLOW_COMMA_in_lista_numeros1441 = new BitSet(new long[]{0x0000800000000000L,0x0000002000000000L});
    public static final BitSet FOLLOW_inteiro_in_lista_numeros1443 = new BitSet(new long[]{0x0000008000000002L});
    public static final BitSet FOLLOW_clausula_in_expressao1464 = new BitSet(new long[]{0x0000002000000002L});
    public static final BitSet FOLLOW_OR_in_expressao1467 = new BitSet(new long[]{0x0002A80003000000L,0x0000007000000000L});
    public static final BitSet FOLLOW_clausula_in_expressao1469 = new BitSet(new long[]{0x0000002000000002L});
    public static final BitSet FOLLOW_literal_in_clausula1495 = new BitSet(new long[]{0x0000001000000002L});
    public static final BitSet FOLLOW_AND_in_clausula1498 = new BitSet(new long[]{0x0002A80003000000L,0x0000007000000000L});
    public static final BitSet FOLLOW_literal_in_clausula1500 = new BitSet(new long[]{0x0000001000000002L});
    public static final BitSet FOLLOW_igual_diferente_in_literal1536 = new BitSet(new long[]{0x0000000F00000002L});
    public static final BitSet FOLLOW_GREATER_EQUAL_in_literal1540 = new BitSet(new long[]{0x0002A80003000000L,0x0000007000000000L});
    public static final BitSet FOLLOW_LOWER_EQUAL_in_literal1542 = new BitSet(new long[]{0x0002A80003000000L,0x0000007000000000L});
    public static final BitSet FOLLOW_LOWER_in_literal1544 = new BitSet(new long[]{0x0002A80003000000L,0x0000007000000000L});
    public static final BitSet FOLLOW_GREATER_in_literal1546 = new BitSet(new long[]{0x0002A80003000000L,0x0000007000000000L});
    public static final BitSet FOLLOW_igual_diferente_in_literal1549 = new BitSet(new long[]{0x0000000F00000002L});
    public static final BitSet FOLLOW_exp_aritmetica_in_igual_diferente1580 = new BitSet(new long[]{0x00000000C0000002L});
    public static final BitSet FOLLOW_EQUAL_in_igual_diferente1584 = new BitSet(new long[]{0x0002A80003000000L,0x0000007000000000L});
    public static final BitSet FOLLOW_NEQUAL_in_igual_diferente1586 = new BitSet(new long[]{0x0002A80003000000L,0x0000007000000000L});
    public static final BitSet FOLLOW_exp_aritmetica_in_igual_diferente1589 = new BitSet(new long[]{0x00000000C0000002L});
    public static final BitSet FOLLOW_termo_in_exp_aritmetica1622 = new BitSet(new long[]{0x0000000006000002L});
    public static final BitSet FOLLOW_MINUS_in_exp_aritmetica1626 = new BitSet(new long[]{0x0002A80003000000L,0x0000007000000000L});
    public static final BitSet FOLLOW_PLUS_in_exp_aritmetica1628 = new BitSet(new long[]{0x0002A80003000000L,0x0000007000000000L});
    public static final BitSet FOLLOW_termo_in_exp_aritmetica1631 = new BitSet(new long[]{0x0000000006000002L});
    public static final BitSet FOLLOW_exp_negacao_in_termo1659 = new BitSet(new long[]{0x0000000038000002L});
    public static final BitSet FOLLOW_MULT_in_termo1663 = new BitSet(new long[]{0x0002A80003000000L,0x0000007000000000L});
    public static final BitSet FOLLOW_DIV_in_termo1665 = new BitSet(new long[]{0x0002A80003000000L,0x0000007000000000L});
    public static final BitSet FOLLOW_MOD_in_termo1667 = new BitSet(new long[]{0x0002A80003000000L,0x0000007000000000L});
    public static final BitSet FOLLOW_exp_negacao_in_termo1670 = new BitSet(new long[]{0x0000000038000002L});
    public static final BitSet FOLLOW_NOT_in_exp_negacao1700 = new BitSet(new long[]{0x0002A80003000000L,0x0000007000000000L});
    public static final BitSet FOLLOW_exp_atomica_in_exp_negacao1702 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_MINUS_in_exp_negacao1728 = new BitSet(new long[]{0x0002A80003000000L,0x0000007000000000L});
    public static final BitSet FOLLOW_exp_atomica_in_exp_negacao1730 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_exp_atomica_in_exp_negacao1761 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_LEFT_PAREN_in_exp_atomica1772 = new BitSet(new long[]{0x0002A80003000000L,0x0000007000000000L});
    public static final BitSet FOLLOW_expressao_in_exp_atomica1774 = new BitSet(new long[]{0x0000100000000000L});
    public static final BitSet FOLLOW_RIGHT_PAREN_in_exp_atomica1776 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_inteiro_in_exp_atomica1798 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_caracter_in_exp_atomica1811 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_BOOL_in_exp_atomica1823 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_id_in_exp_atomica1836 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_procedure_chamada_in_exp_atomica1849 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_id_array_in_exp_atomica1869 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_string__in_string1877 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ASPA_in_string_1893 = new BitSet(new long[]{0x0002000000000000L,0x0000006000000000L});
    public static final BitSet FOLLOW_set_in_string_1895 = new BitSet(new long[]{0x0002000000000000L,0x0000006000000000L});
    public static final BitSet FOLLOW_ASPA_in_string_1903 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_caracter__in_caracter1910 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ASPA_in_caracter_1925 = new BitSet(new long[]{0x0002800000000000L,0x0000006000000000L});
    public static final BitSet FOLLOW_set_in_caracter_1927 = new BitSet(new long[]{0x0002000000000000L});
    public static final BitSet FOLLOW_ASPA_in_caracter_1937 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_int_positivo_literal_in_int_positivo1945 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_DIGIT_in_int_positivo_literal1960 = new BitSet(new long[]{0x0000800000000002L,0x0000002000000000L});
    public static final BitSet FOLLOW_set_in_int_positivo_literal1961 = new BitSet(new long[]{0x0000800000000002L,0x0000002000000000L});
    public static final BitSet FOLLOW_id_literal_in_id1974 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_LETTER_in_id_literal1991 = new BitSet(new long[]{0x0000800000000002L,0x0000006000000000L});
    public static final BitSet FOLLOW_set_in_id_literal1993 = new BitSet(new long[]{0x0000800000000002L,0x0000006000000000L});
    public static final BitSet FOLLOW_id_in_id_array2013 = new BitSet(new long[]{0x0000200000000000L});
    public static final BitSet FOLLOW_LEFT_BRACKET_in_id_array2016 = new BitSet(new long[]{0x0002A80003000000L,0x0000007000000000L});
    public static final BitSet FOLLOW_exp_aritmetica_in_id_array2018 = new BitSet(new long[]{0x0000400000000000L});
    public static final BitSet FOLLOW_RIGHT_BRACKET_in_id_array2020 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_id_in_procedure_chamada2038 = new BitSet(new long[]{0x0000080000000000L});
    public static final BitSet FOLLOW_LEFT_PAREN_in_procedure_chamada2040 = new BitSet(new long[]{0x0002B80003000000L,0x0000007000000000L});
    public static final BitSet FOLLOW_lista_args_in_procedure_chamada2043 = new BitSet(new long[]{0x0000100000000000L});
    public static final BitSet FOLLOW_RIGHT_PAREN_in_procedure_chamada2047 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_inteiro__in_inteiro2055 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_DIGIT_NULL_in_inteiro_2073 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_int_positivo_in_inteiro_2077 = new BitSet(new long[]{0x0000000000000002L});

}